【发布时间】:2015-01-19 15:25:39
【问题描述】:
在我的项目中(PHP 和 Symfony 2)我在每个页面中都做了很多 Ajax 请求。我遇到了很多问题,因为看起来浏览器(在Google Chrome 和Firefox 中测试)正在中止请求而没有给我错误。我已经做了一个干净的页面来测试可能导致此问题的原因并且错误仍然存在。我已经尝试在 for 循环内进行 10 个请求的测试(我相信我们没有任何问题,对吧?)。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test page</title>
</head>
<body>Test page.
<script type="text/javascript" src="/js/compressed_jquery-1.8.2.min_1.js"></script>
<script type="text/javascript">
$(document).ready(function() {
for (var i = 0; i < 10; i++) {
$.get('/i18n/javaScript/pt.json', function(data) {
console.log(data);
});
}
});
</script>
</body>
</html>
这里是Firebug的请求结果截图:
如您所见,有些请求已完成,有些则未完成。有时浏览器会完成所有 10 个请求而不会出错。这可能是什么原因造成的?
我已经测试了所有解决方案,但我很确定这是 Windows、Apache 或 PHP 配置问题。今天我在我的机器上配置了一个VM,VirtualBox 运行Ubuntu 13.04(Raring Ringtail)和 Apache 2.2 + PHP,并且没有发生错误,证明这与我的JavaScript、HTML 或 PHP 无关代码。我不确定这是配置问题。如何发现此配置?
【问题讨论】:
-
看起来所有请求都发往同一个 URL:那么每个请求是因为缓存已完成还是因为出现错误而中止?如果您添加一个随机查询字符串值(即破坏缓存),情况会发生变化吗?
-
我不认为这是一个查询问题,因为当使用缓存时,浏览器会收到 302(未更改)响应。在我的真实代码中,所有请求都有不同的 URL。
-
我已经用这个 url 尝试了我的示例:'/i18n/javaScript/pt.json?t=' + Math.floor(Math.random()*101) 并且错误仍然存在。这不是缓存问题。 =/
-
在这种情况下看看这个stackoverflow.com/questions/4238135/…
-
我不知道这个限制之王。所以我只能同时做4个请求?我不知道该怎么做,因为在我的页面中我有很多不同捆绑包的请求。有什么替代方案吗?
标签: javascript jquery ajax symfony xmlhttprequest