[英]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.