php - jquery、ajax返回奇怪的数据?

标签 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){}实际上意味着什么?

谢谢

最佳答案

如果您请求当前显示的同一页面,则您的 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. 执行回调函数 success(data),传递 AJAX 请求中服务器按原样返回的确切输出(即,变量包含与查看源代码相同的内容) >foo.php?query=... 在您的浏览器中),然后根据您的逻辑进行处理。在本例中,您将内容转储到 div 中,以便您正确地看到输出。

请花点时间安装并运行 Fiddler ,因此您可以在浏览器中加载页面时看到来回流动的确切数据,然后观察进行 AJAX 调用时发生的情况。也许它会让你的数据流和结果变得更加清晰。

希望这有帮助!

关于php - jquery、ajax返回奇怪的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655284/

相关文章:

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - AngularJS select2 不显示任何值

javascript - 单击 <h1> 时展开 <p>

javascript - 不使用 AJAX 加载 XML 文件

javascript - 使用jquery初始化 Bootstrap 进度条

javascript - 如何使用 JavaScript 从 ASP.NET Core Web 应用程序获取 JSON 信息

php - PHP 变量/函数/类名的最大长度是多少?

php - 使用POST php ios上传图像数据

php - 突然出现 Apache 错误? fatal error : Uncaught Error

javascript - jquery 设置单选值组