PHP से जावास्क्रिप्ट फ़ंक्शन कैसे कॉल करें?


202

PHP से जावास्क्रिप्ट फ़ंक्शन कैसे कॉल करें?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?

निम्न कोड xyz.html (एक बटन क्लिक पर) से है यह wait()एक बाहरी xyz.js में कॉल करता है । यह wait()प्रतीक्षा करता है।

function wait() 
{
  xmlhttp=GetXmlHttpObject();
  var url="wait.php"; \
  xmlhttp.onreadystatechange=statechanged; 
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(null);
} 

function statechanged()
{ 
  if(xmlhttp.readyState==4) {
       document.getElementById("txt").innerHTML=xmlhttp.responseText;
  }
}

और प्रतीक्षा करें

<?php echo "<script> loadxml(); </script>"; 

जहां loadxml()दूसरे PHP से कॉल कोड उसी तरह से फाइल करते हैं।

loadxml()अन्यथा ठीक काम कर रहा है, लेकिन यह जिस तरह से मैं इसे चाहते हैं नहीं कहा जा रहा है।


1
इसके अलावा मेरी जावास्क्रिप्ट और php बाहरी हैं।
जीशान रंग

जवाबों:


362

जहां तक ​​PHP का संबंध है (या वास्तव में, सामान्य रूप से एक वेब सर्वर), एक HTML पृष्ठ एक बड़ी स्ट्रिंग से अधिक जटिल नहीं है।

सभी फैंसी काम जो आप PHP जैसी भाषा के साथ कर सकते हैं - डेटाबेस और वेब सेवाओं से पढ़ना और वह सब - अंतिम अंतिम लक्ष्य एक ही मूल सिद्धांत है: HTML का एक स्ट्रिंग उत्पन्न करें *।

जब तक यह वेब ब्राउज़र द्वारा लोड नहीं किया जाता है, तब तक आपका बड़ा HTML स्ट्रिंग इससे अधिक विशेष नहीं हो सकता है। एक बार जब कोई ब्राउज़र पृष्ठ को लोड करता है, तो अन्य सभी जादू होते हैं - लेआउट, बॉक्स मॉडल सामान, डोम पीढ़ी, और जावास्क्रिप्ट निष्पादन सहित कई अन्य चीजें।

तो, आप "PHP से जावास्क्रिप्ट को कॉल न करें", आप "अपने आउटपुट में जावास्क्रिप्ट फ़ंक्शन कॉल शामिल करें"।

ऐसा करने के कई तरीके हैं, लेकिन यहां एक युगल हैं।

सिर्फ PHP का उपयोग करना:

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;

Php मोड से डायरेक्ट आउटपुट मोड में पहुंचना:

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>

आपको एक फ़ंक्शन नाम या ऐसा कुछ भी वापस करने की आवश्यकता नहीं है। सबसे पहले, AJAX अनुरोधों को हाथ से लिखना बंद करें। आप केवल इसे खुद पर कठिन बना रहे हैं। वहाँ बाहर jQuery या अन्य उत्कृष्ट रूपरेखाओं में से एक प्राप्त करें।

दूसरी बात, समझ लें कि AJAX कॉल से प्रतिक्रिया मिलने के बाद आप पहले से ही जावास्क्रिप्ट कोड निष्पादित कर रहे हैं।

यहाँ एक उदाहरण है जो मुझे लगता है कि आप jQuery के AJAX के साथ कर रहे हैं

$.get(
    'wait.php',
    {},
    function(returnedData) {
        document.getElementById("txt").innerHTML = returnedData;

        //  Ok, here's where you can call another function
        someOtherFunctionYouWantToCall();

        // But unless you really need to, you don't have to
        // We're already in the middle of a function execution
        // right here, so you might as well put your code here
    },
    'text'
);

function someOtherFunctionYouWantToCall() {
    // stuff
}

अब, यदि आप PHP से AJAX कॉल पर एक फ़ंक्शन नाम भेजने पर मृत हैं, तो आप वह भी कर सकते हैं।

$.get(
    'wait.php',
    {},
    function(returnedData) {
        // Assumes returnedData has a javascript function name
        window[returnedData]();
    },
    'text'
);

* या JSON या XML आदि।


2
पाठ्यक्रम से बाहर की जावास्क्रिप्ट फ़ाइल में लिंक करने का विकल्प भी है जो कॉल को ही करता है ... इस तरह से आप जावास्क्रिप्ट को जहाँ यह है, जावास्क्रिप्ट कोड में रखते हैं। =)
PatrikAkerstrand

ये काम नहीं कर रहा है। मैंने दोनों की कोशिश की। । ; xmlhttp। ?> जहां loadxml उसी तरह एक और php कॉल करता है। Loadxml () अन्यथा ठीक काम कर रहा है, लेकिन इसे वैसे नहीं कहा जा रहा है जैसा मैं चाहता हूं। क्या आप कृपया सुझाव दे सकते हैं
जीशान रंग

9
इस आदमी ने अभी तक सब कुछ किया है जो मैं अब तक स्पष्ट कर रहा हूं।
केसी

4
@PeterBailey अधिकांश लोग आमतौर पर इस पूछताछ को करने के लिए उस व्यक्ति का अपमान करेंगे और इसे उस पर छोड़ देंगे। आपने वास्तव में मुझे वास्तव में रचनात्मक मदद दी। इसलिए धन्यवाद :)
गिदोन ससून

2
@ नील आपके प्रश्न के लिए धन्यवाद। आप अभी भी यहां कुछ मूलभूत गलत समझ रहे हैं। PHP और क्लाइंट-साइड जावास्क्रिप्ट सीधे प्रत्येक अभिभावक के साथ बातचीत नहीं करते हैं। HTTP हमेशा बीच में होता है। यहां तक ​​कि अजाक्स अनुरोधों के साथ भी मामला है। अपने मूल उत्तर में 7 साल पहले मैंने जो लिखा था, उसे फिर से दोहराने के लिए: जब वेब एप्लिकेशन सर्वर के रूप में कार्य कर रहा है, तो सभी पीएचपी HTML का एक स्ट्रिंग उत्पन्न कर रहे हैं, जिसमें जावास्क्रिप्ट शामिल हो सकता है या नहीं।
पीटर बैली

86

मैं हमेशा सिर्फ echo "<script> function(); </script>";या कुछ इसी तरह का उपयोग करता हूं । आप तकनीकी रूप से PHP में फ़ंक्शन को कॉल नहीं कर रहे हैं, लेकिन यह आपके पास के रूप में मिलने वाला है।


13
बस गूंजित स्क्रिप्ट से पहले जावास्क्रिप्ट फ़ंक्शन को रखना सुनिश्चित करें , या इसे कॉल नहीं किया जा सकता है।
नूरप

क्या हम echoएक चर में आउटपुट के वापस आ सकते हैं PHP?
alper

52

अब (फरवरी 2012) इसके लिए एक नई सुविधा है। चेक यहाँ

कोड नमूना (वेब ​​से लिया गया):

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
  var_dump($e);
}

?>

यह मूल प्रश्न के उपयोग के मामले में बिल्कुल फिट नहीं हो सकता है, लेकिन प्रश्न के शीर्षक से इस उत्तर में अधिक वोट होने चाहिए।
क्रिस श्मिट

4
बस इस बात से अवगत रहें कि इसके लिए आपके PHP इंस्टॉलेशन में V8Js एक्सटेंशन इंस्टॉल करने की आवश्यकता है।
वेलोजेट

11

आप नहीं कर सकते। आप PHP द्वारा आउटपुट HTML से जेएस फ़ंक्शन को कॉल कर सकते हैं , लेकिन यह पूरी तरह से 'नोटेर बात है।


अच्छी तरह से मैं इस तरह से एक जेएस फ़ंक्शन को कॉल करने में सक्षम हूं: इको "<td onClick = loadxml ()> <i> विवरण के लिए क्लिक करें </ i> </ td>"; .... लेकिन मैं अब कुछ भी क्लिक नहीं करना चाहता; । मैं बस चाहता हूँ कि मेरी php किसी भी घटना के साथ JS फ़ंक्शन को कॉल करे।
जीशान रंग

2
वह उदाहरण HTML में क्लिक इवेंट का उपयोग कर रहा है, न कि php पर। जावास्क्रिप्ट क्लाइंट साइड है और php सर्वर साइड है। आप सीधे PHP के साथ जावास्क्रिप्ट को कॉल नहीं कर सकते।
मिस्टरहिस्टर

7

यह संभव नहीं है। PHP एक सर्वर साइड भाषा और जावास्क्रिप्ट क्लाइंट साइड है और वे वास्तव में एक दूसरे के बारे में बहुत कुछ नहीं जानते हैं। आपको एक सर्वर पक्षीय जावास्क्रिप्ट दुभाषिया (जैसे कि Aptanas जैक्सर) की आवश्यकता होगी। हो सकता है कि आप वास्तव में क्या करना चाहते हैं जैसे कि अजाक्स का उपयोग आर्किटेक्चर (जावास्क्रिप्ट फ़ंक्शन PHP स्क्रिप्ट को अतुल्यकालिक रूप से करता है और परिणाम के साथ कुछ करता है)।

<td onClick= loadxml()><i>Click for Details</i></td>

function loadxml()
{
    result = loadScriptWithAjax("/script.php?event=button_clicked");
    alert(result);
}

// script.php
<?php
    if($_GET['event'] == 'button_clicked')
        echo "\"You clicked a button\"";
?>

7

यदि आप इसे बाद के निष्पादन के लिए बाहर निकालना चाहते हैं तो यह ठीक है

यदि आप JS को क्रियान्वित करना चाहते हैं और PHP में परिणाम V8JS का उपयोग करना चाहते हैं

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');

आप आगे के संदर्भ के लिए यहां उल्लेख कर सकते हैं: php v8js में एक्सटेंशन क्या हैं?

यदि आप HTML और JS को निष्पादित करना चाहते हैं और PHP http://htmlunit.sourceforge.net/ में आउटपुट का उपयोग करना चाहते हैं , तो आपका समाधान है


3

PHP सर्वर में चलता है। क्लाइंट में जावास्क्रिप्ट चलता है। तो php एक जावास्क्रिप्ट फ़ंक्शन नहीं कह सकता।


11
कड़े शब्दों में, यह सच नहीं है। सर्वर-साइड जावास्क्रिप्ट भी है और आप सैद्धांतिक रूप से PHP और जावास्क्रिप्ट दोनों एक सर्वर पर चल रहे हैं और एक दूसरे को बुला सकते हैं। व्यवहार में, यह या बहुत ही संभावनाहीन परिदृश्य है।
माइकल बोर्गवर्ड

2

आप इसे भी आजमा सकते हैं: -

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>

-1 के रूप में यह काम नहीं करेगा। आप इन उत्थापन कार्यों को दो अलग-अलग ब्लॉकों में बुला रहे हैं और परिभाषित कर रहे हैं। इसे और इसे
सिराज आलम

2

इस तरह की कोशिश करो

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>

1

आप सीधे ऐसा करने में सक्षम नहीं हो सकते हैं, लेकिन आप जो चाहते हैं , उसके लिए Xajax लाइब्रेरी काफी करीब है। मैं एक उदाहरण के साथ प्रदर्शित करूंगा। यहाँ एक वेबपेज पर एक बटन है:

<button onclick="xajax_addCity();">Add New City</button> 

हमारा सहज अनुमान यह होगा कि xajax_addCity()जावास्क्रिप्ट फ़ंक्शन सही है? खैर, सही और गलत। Xajax अनुमति देता है कि एक अच्छी बात यह है कि हमारे पास कोई भी जेएस फ़ंक्शन नहीं है xajax_addCity(), लेकिन हमारे पास एक PHP फ़ंक्शन है जिसे पीएचपी कहते हैं addCity()!

<?php function addCity() { echo "Wow!"; } ?>

इस बारे में जरा एक मिनट सोचो। हम वास्तव में जावास्क्रिप्ट कोड से एक PHP फ़ंक्शन का आह्वान कर रहे हैं! यह अधिक सरल उदाहरण सिर्फ भूख मिटाने के लिए था, एक्सजैक्स साइट पर एक बेहतर व्याख्या है, मज़े करो!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.