Обратный вызов 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
}
?>