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


202

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

<?php

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

次のコードは、xyz.htmlから(ボタンクリックで)wait()外部のxyz.jsで a を呼び出しています。これ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>"; 

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

loadxml()そうでない場合は正常に動作しているが、それは私がそれを望むように呼び出されていません。


1
また、私のJavaScriptとPHPは外部にあります。
Zeeshan Rang

回答:


362

PHP(または実際には、一般的にWebサーバー)に関する限り、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または他の優れたフレームワークの1つを入手してください。

次に、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など


2
もちろん、呼び出し自体を行う外部のJavaScriptファイルにリンクするオプションもあります...そのようにして、JavaScriptをJavaScriptコード内でそれが属している場所に保持します。=)
PatrikAkerstrand 2009年

これは機能していません。両方試してみました。私のプログラムのフォローは、(ボタンクリックで).htmlからphpファイルをロードする外部.js関数に進みます(xmlhttp = GetXmlHttpObject(); var url = "phpwithmysqlwait.php"; xmlhttp.onreadystatechange = statechangedを使用) ; xmlhttp.open( "GET"、url、true); xmlhttp.send(null);)と私のphp呼び出し<?php echo "<script> loadxml(); </ script>"; ?> loadxmlは同じ方法で別のphpを呼び出します。それ以外の場合、loadxml()は正常に動作していますが、希望どおりに呼び出されていません。何かを提案してください
Zeeshan Rang

9
この男は私が今までやってきたすべてをとても明確にしてくれました。
Kacy

4
@PeterBaileyほとんどの人は通常、この質問をしたことに対して人を侮辱し、そのままにしておきます。あなたは実際に本当に建設的な助けをしてくれました。ありがとうございます:)
Gideon Sassoon

2
@NilsSensご質問ありがとうございます。ここでも基本的なことを誤解しています。PHPとクライアント側のJavaScriptは、相互に直接対話しません。HTTPは常に真ん中にあります。Ajaxリクエストでもそうです。7年以上前に私の元の答えで今書いたことを繰り返します。Webアプリケーションサーバーとして機能しているとき、PHPが実行しているのは、JavaScriptを含む場合と含まない場合があるHTMLの文字列を生成することだけです。
Peter Bailey

86

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


13
エコーされたスクリプトの前に javascript関数を配置してください。そうしないと、呼び出せません。
Nurp 2013年

の出力をecho変数に戻すことはできますPHPか?
アルパー、

52

現在(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);
}

?>

これは元の質問のユースケースに正確に適合しない可能性がありますが、質問のタイトルからすると、この回答のほうがはるかに多くの票を獲得するはずです。
Chris Schmitz、2015

4
これには、PHPインストールにV8Js拡張機能をインストールする必要があることに注意してください。
Velojet 2016

11

できません。PHPによって出力されたHTMLからJS関数を呼び出すことができますが、それはまったく別のことです。


よく私はこのようなJS関数を呼び出すことができます:echo "<td onClick = loadxml()> <i> Click for Details </ i> </ td>"; ....しかし、今は何もクリックしたくない。私のphpに任意のイベントでJS関数を呼び出させるだけです。
Zeeshan Rang

2
この例では、phpではなくHTMLでクリックイベントを使用しています。JavaScriptはクライアント側で、phpはサーバー側です。PHPでJavaScriptを直接呼び出すことはできません。
MrChrister 2009年

7

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

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はサーバーで実行されます。JavaScriptはクライアントで実行されます。そのため、phpはJavaScript関数を呼び出すことができません。


11
厳密に言えば、それは真実ではありません。サーバーサイドJavaScriptもあり、理論的にはPHPとJavaScriptの両方をサーバー上で実行し、相互に呼び出すことができます。実際には、それはもちろん、非常にありそうもないシナリオです。
マイケルボルグワート

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つの別々のブロックで定義します。これこれ
Siraj Alam 2017

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()がJavaScript関数であるということでしょう。ええと、正しいと間違っています。Xajaxが許可するクールな点は、というJS関数xajax_addCity()がないことですが、PHP関数と呼ばれるPHP関数addCity()があります。

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

少し考えてみてください。JavascriptコードからPHP関数を実質的に呼び出しています!その単純化しすぎた例は、食欲を刺激するためのものでした。Xajaxサイトでより良い説明があります。楽しんでください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.