我一直在做很多ajax脚本,每次看起来都不一样。
在这种情况下,我有一个我想发布的表格
<form id="sss">
<input id="qqq"/>
<input type="submit" id="s" href="Search!"/>
</form>
<div id="rrr"></div>
和
$('#s').click(function(){
$.ajax({
url: 'foo.php',
data: {
query: $('#q').val()
},
success: function(data) {
$('#rrr').html(data);
}
});
return false;
});
和
if(isset($_REQUEST['query'])){
print_r($_REQUEST['query']);
}
在<div id="rrr"></div>
中加载print_r($_REQUEST['query']);
以及html页面的所有其余内容会发生什么。
我只想返回$_REQUEST['query']
奇怪!?
任何想法?这success: function(data){}
实际意味着什么?
由于
答案 0 :(得分:2)
如果您要请求当前显示的同一页面,则if
语句不会停止处理,因此也会返回页面的其余部分。您可能需要die()
之后,或(推荐)创建一个完全专用于处理AJAX请求的单独页面。以下是如何正确停止处理的示例:
if (isset($_REQUEST['query'])) {
print_r($_REQUEST['query']);
die(); // stop processing.
}
关于你的第二点,我认为你可能会误解这里实际发生的事情的技术细节:
foo.php
。服务器根据页面中的逻辑执行foo.php
,并将响应输出发送到浏览器。浏览器呈现页面。foo.php?query=...
foo.php?query=...
(就像它在步骤(1)中所做的那样!),这会导致第一个if
在响应中返回其余的html之前触发,因此会返回相同的页面除了顶部的查询输出(尝试直接在浏览器中foo.php?query=...
,我想你会明白我的意思)。data
中。function success(data)
,从AJAX请求传递从服务器返回的确切输出(即,该变量包含与在浏览器中查看foo.php?query=...
的源相同的内容) ,然后根据您的逻辑处理。在这种情况下,您将内容转储到div
,以便正确查看输出。请花点时间安装并运行Fiddler,这样您就可以在浏览器中加载页面时看到来回流动的确切数据,然后观察进行AJAX调用时会发生什么。也许它会使数据流和结果变得更加清晰。
希望这有帮助!