2009-06-25 26 views
162

PHPからJavaScript関数を呼び出す方法は?PHPからJavaScript関数を呼び出す方法は?

<?php 

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

次のコードは、それが外部xyz.jswait()を呼び出しxyz.html(ボタンのクリックで)からです。この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ファイルからloadxml()の呼び出しコードと同じよう

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

loadxml()はうまくいきますが、私が望むように呼び出されていません。

+1

のようにしてみてください。 –

答えて

305

PHPが関わっている限り(または実際には一般的なWebサーバー)、HTMLページは大きな文字列より複雑ではありません。

PHPのような言語でできることは、データベースやWebサービスからの読み込み、そしてすべてのことです。最終目標はまったく同じ基本原則です.HTML *の文字列を生成します。

あなたの大きなHTML文字列は、Webブラウザによって読み込まれるまで、それよりも特別なものになりません。ブラウザがページをロードすると、、次に、レイアウト、ボックスモデル、DOM生成、JavaScript実行を含む他の多くのことが起こります。

あなたは「JavaScriptからPHPを呼び出す」ではなく、出力にJavaScript関数呼び出しを含めます。

これを行うにはさまざまな方法がありますが、ここにはカップルがあります。

だけでPHPを使用する:

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

出力モードを指示するためにPHPモードからの脱出:

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

あなたはそのような関数名か何かを返す必要はありません。まず、AJAXリクエストを手作業で書き留めないでください。あなたは自分でそれを難し​​くしています。jQueryや他の優れたフレームワークを入手してください。

第2に、AJAX呼び出しから応答を受け取ったら、すでにJavaScriptコードを実行しようとしていることを理解してください。ここで

は、あなたが死んでセットバックAJAXコールにPHPから関数名を送信するにしている場合は、あなたが行うことができ、私はあなたが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 
} 

でやっていると思うものの一例ですそれも。今

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

*またはJSONやXMLなど

+2

もちろん、呼び出し自体を行う外部のjavascriptファイルにリンクするオプションもあります.JavaScriptコード内でJavaScriptを所属する場所に保持する方法です。 =) – PatrikAkerstrand

+0

これは機能しません。私は両方を試しました。私のプログラムの続きは、.html(ボタンをクリックして)から、外部の.js関数(xmlhttp = GetXmlHttpObject(); var url = "phpwithmysqlwait.php";を使用して)をロードする外部.js関数に移動します。 \t xmlhttp.onreadystatechange =のstateChanged; \t xmlhttp.open(、URL、真の "GET");) と私のPHPのコール

12

できません。 PHPでHTML からというJS関数を出力することもできますが、それは全体的なことです。

+0

私はこのようなJS関数を呼び出すことができます:echo "詳細を参照してください"; ....しかし、今は何もクリックしたくない。私はちょうど私のPHPが任意のイベントでJS関数を呼び出すようにしたい。 –

+2

この例では、PHPではなくHTMLでクリックイベントを使用しています。 JavaScriptはクライアント側で、PHPはサーバ側です。 PHPでJavaScriptを直接呼び出すことはできません。簡単にするために、 – MrChrister

81

私はいつもちょうどecho "<script> function(); </script>";または類似のものを使用します。あなたは技術的にPHPで関数を呼び出すのではありませんが、これはあなたが得ようとしている限り近いです。

+14

+1。 – tetris11

+10

エコーされたスクリプトの前にjavascript関数を配置するようにしてください。そうしないと、呼び出すことができません。 – Nurp

3

PHPがサーバーで実行されます。 JavaScriptはクライアントで動作します。 PHPはJavaScript関数を呼び出せません。

+9

厳密に言えば、そうではありません。サーバー側のJavaScriptもあります。理論的には、PHPとJavaScriptの両方をサーバー上で実行してお互いに呼び出すことができます。実際には、それはもちろん、まれなシナリオです。 –

6

それはできません。 PHPはサーバー側の言語とJavaScriptクライアント側であり、お互いのことをよく知っているわけではありません。サーバー側のJavaScriptインタープリタ(Aptanas Jaxerなど)が必要です。あなたが実際にやってみたいことは、アーキテクチャーのようなAjaxを使うことです(JavaScript関数は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年2月)は、このための新機能があります。 (ウェブから取られた)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インストールにV8J拡張をインストールする必要があることに注意してください。 – Velojet

1

あなたはこれを直接行うことができないかもしれませんが、Xajaxライブラリーは、あなたが望むものにかなり近いです。私は例を挙げて説明します。ここでは、Webページ上のボタンです:

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

私たちの直感的な推測ではxajax_addCity()は右、Javascriptの関数であることでしょうか?まあ、間違いなく。 Xajaxが許すクールなことは、xajax_addCity()というJS関数はありませんが、PHPが何をすることもできるaddCity()というPHP関数があります。

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

1分ほどお考えください。私たちはJavascriptコードから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これは機能しません。これらのホイスト機能を2つのブロックで呼び出して定義しています。 [this](http://stackoverflow.com/questions/21807135/why-is-my-javascript-function-not-being-called-in-my-div)と[this](http:// stackoverflow。 com/questions/24438186/calling-javascript-function-from-php-not-working) – Siraj

4

あなたが後の実行のためにそれをエコーし​​たい場合は、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"); }'); 

あなたは、さらに参考のためにここで参照することができます。 What are Extensions in php v8js?

あなたがHTML & JSを実行し、PHP http://htmlunit.sourceforge.net/に出力を使用する場合は、メソッドを呼び出したい場合は内部の単一引用符にそれらを囲む必要がありエコー

1

あなたのソリューションです:

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

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

はまた私のJavaScriptとPHPは外部にあるこの

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