jquery,ajax返回奇怪的数据?

时间:2011-10-04 23:49:03

标签: php jquery ajax

我一直在做很多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){}实际意味着什么?

由于

1 个答案:

答案 0 :(得分:2)

如果您要请求当前显示的同一页面,则if语句不会停止处理,因此也会返回页面的其余部分。您可能需要die()之后,或(推荐)创建一个完全专用于处理AJAX请求的单独页面。以下是如何正确停止处理的示例:

if (isset($_REQUEST['query'])) {
    print_r($_REQUEST['query']);
    die(); // stop processing.
}

关于你的第二点,我认为你可能会误解这里实际发生的事情的技术细节:

  1. 客户端从服务器请求foo.php。服务器根据页面中的逻辑执行foo.php,并将响应输出发送到浏览器。浏览器呈现页面。
  2. 客户端发送AJAX请求(这只是一个异步发生的请求,即与加载页面的浏览器分开)foo.php?query=...
  3. 服务器执行foo.php?query=...(就像它在步骤(1)中所做的那样!),这会导致第一个if在响应中返回其余的html之前触发,因此会返回相同的页面除了顶部的查询输出(尝试直接在浏览器中foo.php?query=...,我想你会明白我的意思)。
  4. 但是,由于它是一个AJAX请求,而不是在浏览器中呈现响应,因此响应被捕获到变量data中。
  5. 执行回调function success(data),从AJAX请求传递从服务器返回的确切输出(即,该变量包含与在浏览器中查看foo.php?query=...的源相同的内容) ,然后根据您的逻辑处理。在这种情况下,您将内容转储到div,以便正确查看输出。
  6. 请花点时间安装并运行Fiddler,这样您就可以在浏览器中加载页面时看到来回流动的确切数据,然后观察进行AJAX调用时会发生什么。也许它会使数据流和结果变得更加清晰。

    希望这有帮助!