Обратный вызов запроса AJAX с использованием jQuery

Я новичок в использовании jQuery для обработки AJAX и написал базовый сценарий, чтобы ослабить основы. В настоящее время я отправляю запрос AJAX в тот же файл, и я хочу сделать некоторую дополнительную обработку на основе результатов этого вызова AJAX.

Вот мой код:

**/*convertNum.php*/** $num = $_POST['json']; if (isset($num)) echo $num['number'] * 2; ?> <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> td {border:none;} </style> </head> <body> <table width="800" border="1"> <tr> <td align="center">Number To Send<br /><input type="text" id="numSend" size="40%" style="border:2px solid black;"></td> <td align="center">Number Returned<br /><input type="text" id="numReturn" size="40%" readonly></td> </tr> <tr><td align="center" colspan="4"><input type="button" value="Get Number" id="getNum" /></td></tr> </table> <script> $(document).ready(function () { $('#getNum').click(function () { var $numSent = $('#numSend').val(); var json = {"number":$numSent}; $.post("convertNum.php", {"json": json}).done(function (data) { alert(data); } ); }); }); </script> </body> </html> 

Вот ответ, который я получаю, если я отправлю номер «2»:

 4 <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <style type="text/css"> td {border:none;} </style> </head> <body> <table width="800" border="1"> <tr> <td align="center">Number To Send<br /><input type="text" id="numSend" size="40%" style="border:2px solid black;"></td> <td align="center">Number Returned<br /><input type="text" id="numReturn" size="40%" readonly></td> </tr> <tr><td align="center" colspan="4"><input type="button" value="Get Number" id="getNum" /></td></tr> </table> <script> $(document).ready(function () { $('#getNum').click(function () { var $numSent = $('#numSend').val(); var json = {"number":$numSent}; $.post("convertNum.php", {"json": json}).done(function (data) { alert(data); } ); }); }); </script> </body> </html> 

Очевидно, что меня интересует только получение и использование номера «4», поэтому мой вопрос: что лучше всего указать, какие именно данные я хочу вернуть?

Некоторые мысли, которые у меня были:

  • обертывание всего моего HTML внутри оператора if (т. е. если $ num isset, НЕ выводить html; else выводить HTML), но затем я повторяю HTML, и я бы предпочел не делать этого.
  • Настройка отдельного скрипта PHP для получения моего вызова AJAX: это то, что я сделал изначально, и он работает отлично. Тем не менее, я заинтересован в том, чтобы хранить все в одном файле и хотел бы изучить возможные способы сделать это.

Я уверен, что есть элегантный способ сделать это. Спасибо за любые предложения!

Элегантным способом было бы иметь отдельный (!) PHP-файл, который будет выводить только number times 2 части вашего текущего PHP. Затем вы создаете запрос AJAX с вашего текущего PHP на новый отдельный PHP.

Я верю, что этот пост отвечает на один из аспектов того, что вы видите, – эхо всей страницы в окне оповещения.

Далее, вот несколько хороших сообщений для получения основ AJAX:

Простой пример

Более сложный пример

Population dropdown 2 на основе выбора в выпадающем списке 1

Вы можете добавить die(); после того, как вы эхо-номер, если вы действительно хотите сохранить его на одной странице. Это прекратит выполнение скрипта. Не забудьте добавить скобки вокруг оператора if:

 if (isset($num)) { echo $num['number'] * 2; die(); } 

Это, однако, не самое элегантное решение.

ПРИМЕЧАНИЕ. * Лучший подход заключается в том, чтобы сохранить подобные вещи в отдельном файле, упростить чтение и упростить понимание, особенно если вы используете хорошее преобразование имен.

Это плохой процедурный подход, но я иду :):

 <?php $num = $_POST['json']; if (isset($num)) echo ($num['number'] * 2); die(); ?> 

или еще лучше:

 <?php $num = $_POST['json']; if (isset($num)) die($num['number'] * 2); //In case of error you could put them in brackets ?> 

PS В качестве альтернативы die(); вы можете использовать exit(); , они оба делают почти то же самое: прекращение дальнейшего исполнения

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

 <?php /*convertNum.php*/ $num = isset($_POST['json']) ? $_POST['json'] : NULL; //you have errors in this line if (!is_null($num)){ echo $num['number'] * 2; exit(); //exit from script } ?>