【发布时间】:2014-09-21 10:11:19
【问题描述】:
我阅读了所有这些类似的问题:1、2、3、4、5 和 6。但我需要调试更多。
所有这些问题都说问题是由于跨域策略引起的,e.preventDefault() 解决了问题。但我怀疑这会破坏其他一些东西,所以我需要确定。
在我的站点中,我有一个每天触发 15k 次的操作。当用户访问网页时,我的 javascript 文件会检查元素。如果元素存在,它会进行 AJAX 调用。
$(document).ready(function() {
// I do something here
if ($('#mydiv').length !== 0) {
var startTime = new Date().getTime();
$.ajax({
type: "POST",
url: "/mypage",
success: function (data) {
// I do something here
},
timeout: 20000,
error: function(r, s, e) {
var elapsedTime = (new Date().getTime() - startTime );
var string = "readyState: "+r.readyState+", status: "+r.status+", statusText: "+r.statusText+", responseText: "+r.responseText+", textStatus: "+s+", error: "+e +", elapsedTime: "+elapsedTime;
// send this string to server for logging
formData = {string:string};
$.ajax({
url : "/mylog",
type: "POST",
data : formData
});
}
});
}
// I do something here
});
对于 15k 个请求,大约 70 次用户会收到 AJAX 错误。 ~20 是由于超时。 ~50 是由于未知错误。当我检查客户端的日志时,我看到 AJAX 请求为未知错误提供了这些值:readyState: 0, status: 0 and statusText: error
尽管针对此问题建议使用 e.preventDefault()。我需要知道用户为这个错误做了什么。在我的 javascript 文件中,我没有提出任何跨域请求。但我不知道用户为这个错误做了什么?是否有可能了解更多关于此错误的信息?
注意:我跟踪“AJAX 调用开始”和“AJAX 错误”之间的时间。平均时间为 1500-2000 毫秒。
编辑:如果我使用preventDefault(),我可以把它放在哪里?因为我没有注册点击功能等。
Edit2:This page 这么说:
我们发现,如果 ajax 请求正在获取,则可能会发生这种情况 在完成之前取消。如果我们可以重现这个问题 触发了ajax请求,然后立即点击链接到 离开页面。 jQuery 抛出错误事件时 用户通过刷新或单击离开页面 链接,或更改浏览器中的 URL。
但我无法通过在加载 AJAX 时单击某个链接来重现该问题。
【问题讨论】:
-
你能弄清楚这个吗?我一直在经历几乎相同的情况,其中看似随机的请求以您的速率或稍高的速率失败,statusText=error 和 status=0。谢谢!
-
我可以在 ajax 加载期间按 Esc 键重复此错误。当我按 Esc 键时,ajax 停止并发生错误。
标签: javascript jquery ajax