Обратный вызов 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; иначе выводите HTML), но тогда я повторяю HTML, и я бы предпочел этого не делать.
  • настройка отдельного скрипта PHP для получения моего вызова AJAX: это было то, что я сделал изначально, и он работает просто отлично. Однако, меня интересует все держать в себе один файл, и хотел изучить возможные способы сделать это.

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

5 ответов


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


Я считаю этот пост отвечает на один аспект того, что вы видите - Эхо всей страницы в окне предупреждения.

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

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

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

заполнить выпадающий список 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
 }
?>