簡體   English   中英

如何從 PHP 調用 JavaScript function?

[英]How to call a JavaScript function from PHP?

如何從 PHP 調用 JavaScript function?

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

等待。php

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

其中loadxml()以相同的方式從另一個 PHP 文件調用代碼。

否則loadxml()工作正常,但沒有按我想要的方式調用它。

就 PHP 而言(或者實際上是一般的 Web 服務器),HTML 頁面並不比一個大字符串復雜。

您可以使用 PHP 之類的語言完成的所有奇特工作——從數據庫和 Web 服務中讀取等等——最終的最終目標是完全相同的基本原則:生成一串 HTML*。

在 Web 瀏覽器加載之前,您的大 HTML 字符串不會變得比這更特別。 一旦瀏覽器加載頁面,所有其他的魔法發生-布局,盒模型的東西,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 等。

我總是只使用echo "<script> function(); </script>"; 或類似的東西。 從技術上講,您不是在 PHP 中調用該函數,但這與您將要獲得的非常接近。

現在(2012 年 2 月)有一個新功能。 在這里查看

代碼示例(摘自網絡):

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

?>

你不能。 您可以從 PHP輸出的 HTML 中調用 JS 函數,但這完全是另一回事。

如果您想將其回顯以供以后執行,則可以

如果要執行 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/是您的解決方案

那是不可能的。 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\"";
?>

像這樣嘗試

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

你也可以試試這個:-

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

PHP 在服務器中運行。 JavaScript 在客戶端運行。 所以 php 不能調用 JavaScript 函數。

您可能無法直接執行此操作,但Xajax庫非常接近您想要的。 我將用一個例子來演示。 這是網頁上的一個按鈕:

<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 站點上有更好的解釋,玩得開心!

我不接受反對者的回答。

如果你找到一些特殊的包讓它工作,那么你可以自己做 所以,我不買那些答案。

onClick是一個涉及最終用戶的雜項,因此是不可接受的。

@umesh 很接近,但它不是一個獨立的程序。 這是這樣的(改編自他的回答):

<script type="text/javascript">
function JSFunction() {
    alert('In test Function');   // This demonstrates that the function was called
}
</script>

<?php
// Call a JS function "from" php

if (true) {   // This if() is to point out that you might
              // want to call JSFunction conditionally
    // An echo like this is how you implant the 'call' in a way
    // that it will be invoked in the client.
    echo '<script type="text/javascript">
         JSFunction();
    </script>';
}

如果要在echo中調用method,則必須將它們用單引號引起來:

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

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

對於一些后端節點處理,可以通過shell運行JS腳本,通過console.log返回結果給PHP

  function executeNode($script)
  {
    return shell_exec('node -e \'eval(Buffer.from("'.base64_encode($script).'", "base64").toString())\'');
  }


  $jsCode = 'var a=1; var b=2; console.log(a+b);';
  
  echo executeNode($jsCode);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM