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

Author: mithunsatheesh, 2009-06-25

11 answers

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

 323
Author: Peter Bailey, 2016-08-04 14:35:28

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

 83
Author: GSto, 2009-06-25 19:48:36

На данный момент (февраль 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);
}

?>
 44
Author: bertzzie, 2012-02-25 12:48:45

Ты не можешь. Вы можете вызвать функцию JS из HTML , выведенную PHP, но это совсем другое дело.

 13
Author: Matthew Flaschen, 2009-06-25 19:48:28

Это невозможно. 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\"";
?>
 6
Author: Daff, 2009-06-25 19:57:12

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

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

 6
Author: Pian0_M4n, 2017-05-23 12:10:06

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

 3
Author: Daniel Moura, 2009-06-25 19:49:01

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

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>
 2
Author: umesh, 2013-03-19 11:05:53

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

 1
Author: Ham Sam, 2013-08-05 09:04:14

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

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

    echo "<td onclick='f();'>".Method calling."</td>";
 1
Author: Adiii, 2017-01-07 12:30:49

Попробуйте вот так

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>
 1
Author: Vivek ab, 2017-03-17 07:34:24