web-dev-qa-db-ja.com

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

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

<?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>"; 

loadxml()は別のPHPファイルから同じ方法でコードを呼び出します。

loadxml()はそれ以外ではうまく機能していますが、望んでいるようには呼ばれていません。

185
Zeeshan Rang

PHPに関する限り(あるいは実際にはウェブサーバ全般)、HTMLページは大きな文字列ほど複雑ではありません。

PHPのような言語を使ってできる素晴らしい仕事 - データベースやWebサービスからの読み取りなど - 究極の最終目標はまったく同じ基本原則です。一連のHTML *を生成します。

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

つまり、「PHPからJavaScriptを呼び出す」のではなく、「出力にJavaScript関数呼び出しを含める」ということです。

これを行うには多くの方法がありますが、ここにいくつかあります。

PHPだけを使う:

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

Phpモードから直接出力モードへのエスケープ:

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

関数名などを返す必要はありません。まず最初にAJAXリクエストを手で書くのをやめてください。あなたはそれを自分自身で難しくしているだけです。 jQueryや他の優れたフレームワークを入手してください。

次に、AJAX呼び出しから応答が受信されたら、JavaScriptコードを実行することになります。

これは私があなたが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など.

337
Peter Bailey

私はいつもecho "<script> function(); </script>";あるいはそれに似たものを使うだけです。あなたは技術的にはPHPで関数を呼んでいません、しかしこれはあなたが得ることになるのと同じくらい近くにあります。

83
GSto

今のところ(2012年2月)、これに関する新しい機能があります。チェック ここ

コードサンプル(Webから取得):

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

?>
46
bertzzie

できません。あなたはPHPからHTML output からJS関数を呼び出すことができますが、それは全体的に非常に重要なことです。

13

後で実行するためにエコーアウトしたい場合は、問題ありません。

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/ の出力を使用したい場合は、解決策が必要です。

7
Pian0_M4n

それは可能ではありません。 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\"";
?>
6
Daff

PHPはサーバー上で動作します。 JavaScriptはクライアントで実行されます。そのため、phpはJavaScript関数を呼び出すことができません。

3
Daniel Moura

あなたもこれを試すことができます: -

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

こんな感じ

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

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

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

私たちの直感的な推測は、xajax_addCity()はJavascript関数であるということでしょう?まあ、それは間違いです。 Xajaxでできることは、xajax_addCity()というJS関数がないということですが、addCity()というPHP関数で、PHPが何でもできるということです。

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

ちょっと考えてみてください。 JavascriptコードからPHP関数を仮想的に呼び出しています。あまりにも単純化された例は、食欲を駆り立てるためだけのものでした。より良い説明は、Xajaxサイトにあります。

1
Hamman Samuel

メソッドをechoの中で呼び出したい場合は、それらを一重引用符で囲む必要があります。

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

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