我读了所有这些类似的问题: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 call start”和“AJAX error”之间的时间。平均时间为1500-2000毫秒。
编辑:如果我使用preventDefault()
,我可以在哪里放置它?因为我没有注册点击功能等。
Edit2:This page说:
我们发现如果ajax请求到达,可能会发生这种情况 在完成之前取消。如果我们可以重现这个问题 触发了ajax请求,然后立即点击链接 离开页面。当jQuery抛出错误事件时 用户通过刷新,单击a导航离开页面 链接或更改浏览器中的URL。
但是我无法通过在加载AJAX时单击某个链接来重现该问题。
答案 0 :(得分:4)
解决。
我遇到了同样的问题。在ajax调用之后存在重定向时会发生此问题。
破码:
$.ajax({
url: '',
dataType: 'jsonp',
success: function (json) {
// do stuff here
},
error: function (error) {
// do stuff here
}
});
window.location.href = "www.google.com";
在上面的代码中,在ajax之后有重定向,它给出了就绪状态0的错误。
解决方案: 得到一些回复后写重定向。我写完了。
$.ajax({
url: '',
dataType: 'jsonp',
success: function (json) {
// do stuff here
},
error: function (error) {
// do stuff here
},
complete: function () {
window.location.href = "www.google.com";
}
});