6

我是使用 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 调用:这就是我最初所做的,它工作得很好。但是,我有兴趣将所有内容保存在一个文件中,并想探索可能的方法。

我确信有一种优雅的方法可以做到这一点。感谢您的任何建议!

4

5 回答 5

7

优雅的方法是拥有一个单独的(!)PHP 文件,它只会输出number times 2当前 PHP 的一部分。然后生成一个从当前 PHP 到新的单独 PHP 的 AJAX 请求。

于 2013-07-31T14:42:19.657 回答
2

我相信这篇文章回答了您所看到的一个方面 - 整个页面在警报框中的回声。

接下来,这里有一些关于 AJAX 基础知识的好文章:

一个简单的例子

更复杂的例子

根据下拉列表 1 中的选择填充下拉列表 2

于 2013-07-31T15:41:34.860 回答
1

注意*更好的方法是将此类内容保存在单独的文件中,使其更易于阅读和理解,尤其是在您使用良好的命名转换时。

这是一种糟糕的程序方法,但我走了:):

<?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();,它们的作用几乎相同:终止进一步执行

于 2013-07-31T14:52:30.520 回答
1

die();如果您真的想将其保留在同一页面上,您可以在回显数字后添加。这将终止脚本的执行。不要忘记在 if 语句周围添加括号:

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

然而,这不是最优雅的解决方案。

于 2013-07-31T14:55:07.160 回答
0

我不知道这有多有效,但您可以执行以下操作:

<?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
 }
?>
于 2013-07-31T14:56:04.927 回答