2009-06-25 24 views
162

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

<?php 

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

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

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; 
    } 
} 

और wait.php

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

जहां एक और PHP से loadxml() कॉल कोड उसी तरह की जानकारी दें।

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

+1

भी मेरी जावास्क्रिप्ट और PHP बाहरी हैं। –

उत्तर

305

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

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

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

तो, आप "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 do 
     // 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 
} 

अब अगर आप मृत सेट वापस AJAX कॉल करने के लिए PHP से एक समारोह के नाम भेजने पर कर रहे हैं, आप कर सकते हैं वह भी।

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

* या JSON या XML आदि

+2

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

+0

यह काम नहीं कर रहा है। मैंने दोनों की कोशिश की। मेरे प्रोग्राम का अनुवर्ती है। एचटीएमएल (बटन क्लिक पर) यह एक बाहरी .js फ़ंक्शन पर जाता है जो एक php फ़ाइल लोड करता है (xmlhttp = GetXmlHttpObject() का उपयोग करके; var url = "phpwithmysqlwait.php"; \t xmlhttp.onreadystatechange = statechanged; \t xmlhttp.open ("GET", यूआरएल, true); \t xmlhttp.send (शून्य);) और मेरे php कॉल loadxml();"; ?> जहां लोडक्सएमएल एक और तरीके से एक और php कहते हैं। लोडक्सएमएल() अन्यथा ठीक काम कर रहा है, लेकिन इसे जिस तरह से मैं चाहता हूं उसे नहीं कहा जा रहा है। क्या आप कृपया कुछ सुझाव दे सकते हैं –

+0

इस जानकारी के साथ अपना मूल प्रश्न अपडेट करें ताकि इसे पढ़ना आसान हो। मैं इन विनिर्देशों को संबोधित करने के लिए अपने उत्तर को संशोधित कर सकता हूं –

12

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

+0

अच्छी तरह से मैं इस तरह एक जेएस फ़ंक्शन को कॉल करने में सक्षम हूं: echo " विवरण" के लिए क्लिक करें "....लेकिन मैं अब कुछ भी क्लिक नहीं करना चाहता हूं। मैं बस अपने PHP को किसी भी घटना के साथ जेएस फ़ंक्शन कॉल करना चाहता हूं। –

+2

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

81

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

+14

+1। – tetris11

+10

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

3

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

+9

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

6

संभव नहीं है। 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\""; 
?> 
42

प्रति अब (फरवरी 2012) इसके लिए एक नई सुविधा है। here

कोड का नमूना (वेब ​​से लिया गया) की जाँच करें:

<?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); 
} 

?> 
+0

वैसे नमस्ते वहाँ हैलो! वास्तव में मुझे क्या चाहिए। – cen

+0

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

+3

बस ध्यान रखें कि इसके लिए आपके PHP स्थापना में V8Js एक्सटेंशन स्थापित करने की आवश्यकता है। – Velojet

1

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

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

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

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

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

2

आप भी इस एक कोशिश कर सकते हैं: -

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

-1 क्योंकि यह काम नहीं करेगा। आप इन अलग-अलग कार्यों को दो अलग-अलग ब्लॉक में बुला रहे हैं और परिभाषित कर रहे हैं। पढ़ें [यह] (http://stackoverflow.com/questions/21807135/why-is-my-javascript-function-not-being-called-in-my-div) और [यह] (http: // stackoverflow। com/प्रश्न/24438186/कॉल करने वाले जावास्क्रिप्ट-समारोह-से-php-नहीं काम) – Siraj

4

आप यह ठीक

है बाद में निष्पादन के लिए इसे बाहर प्रतिध्वनित करने के लिए आप जे एस निष्पादित और V8JS PHP में परिणाम का उपयोग उपयोग करना चाहते हैं चाहते हैं

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"); }'); 

आप यहाँ आगे के संदर्भ के लिए उल्लेख कर सकते हैं: What are Extensions in php v8js?

आप HTML & जे एस निष्पादित और पीएचपी http://htmlunit.sourceforge.net/ में उत्पादन उपयोग करना चाहते हैं यदि आप के अंदर गूंज आप उन्हें एकल उद्धरण में संलग्न करने के लिए है विधि कॉल करना चाहते हैं अपने समाधान

1

है:

function f() { 
     //code 
     alert("its calling from echo "); 
    } 

    echo "<td onclick='f();'>".Method calling."</td>"; 
0

इस

<?php 
if(your condition){ 
    echo "<script> window.onload = function() { 
    yourJavascriptFunction(param1, param2); 
}; </script>"; 
?> 
संबंधित मुद्दे