Как вызвать функцию JavaScript из PHP?
как вызвать функцию JavaScript из PHP?
<?php
jsfunction();
// or
echo(jsfunction());
// or
// Anything else?
следующий код xyz.HTML-код (при нажатии кнопки) он вызывает wait()
внешний xyz.js. Это wait()
вызовы подождать.РНР.
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()
работает нормально, в противном случае, но это не называется так, как я хочу он.
11 ответов
что касается 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.
вот пример того, что я думаю, что вы делаете с AJAX jQuery
$.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 etc.
Я всегда просто использовать echo "<script> function(); </script>";
или что-то подобное. вы технически не вызываете функцию в PHP, но это так близко, как вы собираетесь получить.
per now (февраль 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);
}
?>
Это невозможно. 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 и использовать вывод в PHPhttp://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, получайте удовольствие!
Если вы хотите вызвать метод внутри echo, вы должны заключить их в одинарные кавычки:
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>";
?>