Как вызвать функцию JavaScript из PHP?
<?php jsfunction(); // or echo(jsfunction()); // or // Anything else?
Следующий код из xyz.html (при нажатии кнопки) вызывает wait()
во внешнем xyz.js. Это 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()
работает нормально, но его не называют так, как я его хочу.
Что касается PHP (или, действительно, веб-сервера в целом), HTML-страница не более сложна, чем большая строка.
Вся фантастическая работа, которую вы можете сделать с языком, например PHP, – чтение из баз данных и веб-сервисов и все такое – конечная конечная цель – это тот же самый основной принцип: генерировать строку HTML *.
Ваша большая строка HTML не становится чем-то более особенным, чем до загрузки браузера. Как только браузер загружает страницу, происходит вся другая магия – макет, материал модели коробки, создание 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 или одну из других отличных фреймворков.
Во-вторых, поймите, что вы уже собираетесь выполнять javascript-код после получения ответа от вызова AJAX.
Вот пример того, что я думаю, что вы делаете с 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 }
Теперь, если вы настроены на отправку имени функции из 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 г.) для этого есть новая функция. Проверить здесь
Пример кода (взятый из Интернета):
<?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); } ?>
Вы не можете. Вы можете вызывать функцию JS из HTML, выводимую PHP, но это целая «ночная вещь».
Это невозможно. 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\""; ?>
Если вы хотите повторить это для последующего исполнения, это нормально
Если вы хотите выполнить 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/, это ваше решение
PHP работает на сервере. JavaScript работает на клиенте. Поэтому php не может вызвать функцию JavaScript.
вы также можете попробовать это:
public function PHPFunction() { echo '<script type="text/javascript"> test(); </script>'; } <script type="text/javascript"> public function test() { alert('In test Function'); } </script>
Возможно, вы не сможете это сделать напрямую, но библиотека Xajax довольно близка к тому, что вы хотите. Я продемонстрирую пример. Вот кнопка на веб-странице:
<button onclick="xajax_addCity();">Add New City</button>
Наше интуитивное предположение заключалось бы в том, что xajax_addCity()
является функцией Javascript, правильно? Ну, правильно и неправильно. Охлаждающая вещь, которую позволяет Xajax, заключается в том, что у нас нет функции JS, называемой xajax_addCity()
, но у нас есть функция PHP, называемая addCity()
которая может делать все, что делает PHP!
<?php function addCity() { echo "Wow!"; } ?>
Подумайте об этом на минуту. Мы фактически вызываем функцию PHP из кода Javascript! Этот упрощённый пример был просто для возбуждения аппетита, лучшее объяснение на сайте Xajax, повеселиться!
если вы хотите вызвать метод внутри эха, вы должны заключить их в одинарные кавычки:
function f() { //code alert("its calling from echo "); } echo "<td onclick='f();'>".Method calling."</td>";
попробуй вот так
<?php if(your condition){ echo "<script> window.onload = function() { yourJavascriptFunction(param1, param2); }; </script>"; ?>