Вызов функции Javascript из функции PHP

#php #javascript #function

#php #javascript #функция

Вопрос:

Ниже приведен мой код в одном PHP-файле с именем testOne.php

 <html>
<head>
     <script type="text/javascript">
          function testAlert(firstValue, secondValue)
          {
               alert ("Passed: " firstValue secondValue);
          }
     </script>
</head>
<body>
  ....
</body>
</html>

<?php
     function testPassedValues($One, $Two)
     {
        echo "<input type = "button" onclick = "testAlert($One[2], $Two[2])">Click Here!</input>";
     }

     $link = mysql_connect("localhost", "root", "");
     if (mysql_select_db("myDatabase", $link))
     {
         $result = mysql_query("SELECT * FROM MYTABLE");
         while($currRowOne = mysql_fetch_row($result) amp;amp;
               $currRowTwo = mysql_fetch_row($result))
         {
             testPassedValues($currRowOne, $currRowTwo);
         }
     }
?>
  

Чтобы помочь в понимании, я вызываю метод javascript testAlert() из функции PHP testPassedValues() . Однако я не уверен, в чем проблема, поскольку вызов не выполнен успешно. В Mozilla (Firebug) я не нахожу никаких проблем, а в Chrome-> Инструменты разработчика я получаю сообщение об ошибке Uncaught Syntaxerror: Unexpected token ILLEGAL в консоли.

Кто-нибудь, пожалуйста, может помочь мне в определении основной причины здесь?

Ответ №1:

Я не думаю, что вы полностью поняли, где и как выполняются JavaScript и PHP.

PHP запускается на сервере. Она генерирует HTML-страницу (потенциально содержащую JavaScript), которая затем отправляется клиенту. Теперь PHP завершен.

Затем веб-браузер клиента запускает JavaScript.

Чтобы отладить вашу проблему с JavaScript, взгляните на веб-страницу, которую действительно видел клиент. Если Firebug сообщает о проблеме, значит, она там и есть.

Комментарии:

1. Я не понял вас, когда вы сказали «взгляните на веб-страницу, которую на самом деле видел клиент». PHP-код обновляет ту же страницу результатами запроса из базы данных. Нажатие кнопки не вызывает никаких изменений на веб-странице и выдает ошибку, указанную в Google Chrome-> Инструменты разработчика, а не Firebug. Firebug не сообщает ни о какой ошибке.

2. @darkie15: используйте функцию «просмотр исходного кода» в вашем браузере. Вы не увидите там никакого PHP, но с результирующей веб-страницей что-то не так.

Ответ №2:

Скорее всего, значения $One[2] и $Two[2] являются строками, поэтому сгенерированный HTML является:

 <input type = "button" onclick = "testAlert(string one, string two)">Click Here!</input>
  

Что, очевидно, является недопустимым javascript.

Заключите параметры в кавычки:

 echo "<input type = "button" onclick = "testAlert('$One[2]', '$Two[2]')">Click Here!</input>";
  

Вы также должны корректно экранировать значения of $One[2] и $Two[2] для HTML и JavaScript, чтобы не вводить недостатки XSS или ошибки, когда строка содержит апостроф. Я оставляю это на ваше усмотрение, чтобы вы могли разобраться.

Комментарии:

1. Спасибо за предложение, похоже, теперь предыдущая проблема решена. Но я получаю новое сообщение об ошибке Uncaught ReferenceError: testAlert is not defined . Есть предложения по этой ошибке?

2. Ну, у вас отсутствует закрывающий тег </script> в приведенном выше примере, возможно, это и является причиной проблемы. Ошибка описывает проблему, хотя — функция testAlert не существовала, когда была нажата кнопка.

3. Что ж, это была моя ошибка. Я ввел приведенный выше код <script></script> и забыл завершить его. Однако в фактическом коде был конечный тег, и я все еще получаю ту же проблему