我做了很多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){}
实际上意味着什么?
谢谢
最佳答案
如果您请求当前显示的同一页面,则您的 if
语句不会停止处理,因此页面的其余部分也会返回。之后您需要die()
,或者(推荐)创建一个完全专用于处理 AJAX 请求的单独页面。以下是如何正确停止处理的示例:
if (isset($_REQUEST['query'])) {
print_r($_REQUEST['query']);
die(); // stop processing.
}
关于你的第二点,我认为你可能误解了这里实际发生的技术细节:
- 客户端从服务器请求
foo.php
。服务器根据页面中的逻辑执行foo.php
,并将响应输出发送到浏览器。浏览器呈现页面。 - 客户端将 AJAX 请求(只不过是异步发生的请求,即与浏览器加载页面分开)发送到
foo.php?query=...
- 服务器执行
foo.php?query=...
(就像步骤 (1) 中所做的那样!),这会导致第一个if
在返回之前触发html 的其余部分作为响应,因此返回相同的页面,除了顶部的查询输出(尝试在浏览器中直接访问foo.php?query=...
,我认为您就会明白我的意思)。 - 但是,由于它是 AJAX 请求,因此响应不是在浏览器中呈现,而是被捕获到变量
data
中。 - 执行回调
函数 success(data)
,传递 AJAX 请求中服务器按原样返回的确切输出(即,变量包含与查看源代码相同的内容) >foo.php?query=...
在您的浏览器中),然后根据您的逻辑进行处理。在本例中,您将内容转储到div
中,以便您正确地看到输出。
请花点时间安装并运行 Fiddler ,因此您可以在浏览器中加载页面时看到来回流动的确切数据,然后观察进行 AJAX 调用时发生的情况。也许它会让你的数据流和结果变得更加清晰。
希望这有帮助!
关于php - jquery、ajax返回奇怪的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655284/