Как вызвать функцию JavaScript из PHP?

Как вызвать функцию 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() работает отлично в противном случае, но его не называют так, как я его хочу.

Ответ 1

Что касается 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 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 и т.д.

Ответ 2

Я всегда использую echo "<script> function(); </script>"; или что-то подобное. вы не технически называете функцию в PHP, но это так близко, как вы собираетесь получить.

Ответ 3

В настоящее время (февраль 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);
}

?>

Ответ 4

Вы не можете. Вы можете вызвать JS-функцию из HTML, выводимого PHP, но это целая "ночная вещь".

Ответ 5

Это невозможно. PHP - это серверный язык и клиентский интерфейс JavaScript, и они не очень много знают друг о друге. Вам понадобится серверный JavaScript-интерпретатор (например, Aptanas Jaxer). Возможно, что вы на самом деле хотите сделать, это использовать Ajax как архитектура (функция JavaScript вызывает PHP script асинхронно и делает что-то с результатом).

<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\"";
?>

Ответ 6

Если вы хотите повторить его для последующего выполнения, это нормально

Если вы хотите выполнить 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/ - это ваше решение

Ответ 7

PHP работает на сервере. JavaScript работает на клиенте. Поэтому php не может вызвать функцию JavaScript.

Ответ 8

вы также можете попробовать: -

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

Ответ 9

Возможно, вы не сможете напрямую это сделать, но библиотека 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, весело провести время!

Ответ 10

если вы хотите вызвать метод внутри эха, вы должны заключить их в одинарные кавычки:

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

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

Ответ 11

попробуйте это

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