2013-07-31 81 views
6

我是使用jQuery处理AJAX的新手,并且已经编写了一个基本脚本来获取基础知识。目前,我正在向同一个文件发布AJAX请求,并且希望根据该AJAX调用的结果进行一些额外的处理。使用jQuery的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',因此我的问题是:什么是确切指定我想要返回的数据的最佳方式?

一些想法我有:

  • 包装一个if语句里面我所有的HTML(即,如果$ NUM isset,不输出HTML;否则输出HTML),但是我呼应HTML ,我宁愿不这样做。
  • 设置一个单独的PHP脚本来接收我的AJAX调用:这是我最初做的,它工作得很好。但是,我有兴趣将所有内容都保存在一个文件中,并且希望探索可能的方式。

我确定有一个优雅的方式来做到这一点。感谢您的任何建议!

+0

你为什么愿意把一切都在一个文件中。你应该构建你的代码。否则,你会得到非常大的文件与混淆的代码。那么CSS和JavaScript呢?你也想把它全部放在一个文件中吗?你可以做到这一点,但我认为这不会很优雅。 – steven

+0

Steven - 够公平的。我想探索的重点是保留一个文件中的所有调用,因为我正在开发一个项目,在这个项目中我们将有多个使用AJAX调用的PHP页面,并且我正在尝试确定处理这种情况的最佳实践。 现在,我会说,每个使用AJAX调用类似这样的脚本也会有相应的。公司包括文件 - 也许这将是最好的让POST调用包含文件,而不是使用同一页面或不同脚本。 我现在处于开发的探索阶段,我得到的答案非常有帮助。 – JRizz

回答

7

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

+0

嗨devnull, 这是我原来的做法。我需要编辑我的答案,包括 - 谢谢。 我也有AJAX调用指向一个单独的PHP脚本,但我想探索保持它所有在一个页面上的想法。 – JRizz

+1

然后,你应该去'if' ......你不需要回显HTML,你仍然可以在部分之外拥有HTML部分。这也将在PHP if语句中起作用! – devnull69

+0

有趣 - 我没有考虑过。让我再玩一下我的剧本并探索一下。谢谢 - 我想留下来打开其他想法来考虑,但如果这是最好的解决方案,我会标记这个答案。我感谢你的意见。 – JRizz

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();,他们都做几乎相同:终止进一步执行

+1

括号中的第一种方法? +1第二个 – steven

+0

感谢您的错字:)没有看到 –

+0

谢谢Ghostman。这是我的原创方法 - 我已经对我的问题进行了编辑以指定。它效果很好,但我想探索使用同一页面来接收AJAX调用的想法。看起来这仍然是最有效的方式。谢谢! – JRizz

1

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

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

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

+0

DaGhostman Dimitrov击败了我。 – Valk6

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 
} 
?>