如果我发送一些ajax请求,并在请求返回之前立即更改页面(比如关注一些链接)会发生什么?我的意思是我认为XHR对象向网站发送请求,但在检索到响应之前它被删除(因为页面已被更改),那么响应应该发送到哪里?
我问这个问题是因为我的网站出现了一个奇怪的问题.我有一个页面通过Ajax请求从数据存储加载帖子.如果在加载完成之前我单击一个链接,我得到了jQuery.ajax的错误!不知道为什么会这样.
编辑:这是我对ajax的调用.在正常情况下,将调用成功回调.但是当我点击链接时,会调用错误回调!我正在考虑的事情,可能是因为数据应格式化为JSON,但请求在中间切断,因此数据被认为无效导致jQuery调用错误回调?!但那么为什么请求会在中间切断?
$.ajax({
type: (args.rel == "async" || args.rel == "dialog") ? "GET" : "POST",
url: href,
dataType: "json",
data: args.data ? args.data:{}, // send {} to ensure Content-Length header
success: function(data){
if (context) context.removeClass("ajax_wait");
if (args.hideonwait) $(args.hideonwait).show();
if (args.showonwait) $(args.showonwait).hide();
if (spinner) remove_spinner(context, spinner);
handle_response(args, context, target, data);
},
error: function(xhr, status, errorThrown){
if (context) context.removeClass("ajax_wait");
if (args.hideonwait) $(args.hideonwait).show();
if (args.showonwait) $(args.showonwait).hide();
if (spinner) remove_spinner(context, spinner);
ajax_error(args, context,
status + "-" + xhr.status,
errorThrown ? errorThrown : xhr.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
Yas*_*ser 10
诀窍是检查XMLHttpRequest对象中的响应头.如果没有响应头(null或空字符串,具体取决于浏览器),则服务器尚未响应.这意味着用户中止了.
$.ajax({
url: "url-to-go-here",
success: function() {
},
error: function(xhr, textStatus, errorThrown) {
if(!isUserAborted(xhr)) {
console.log("Ajax Error")
}
}
});
function isUserAborted(xhr) {
return !xhr.getAllResponseHeaders();
}
Run Code Online (Sandbox Code Playgroud)
你会不走运的。您将无法返回回调。Ajax 响应将会丢失。在这种情况下,我会在页面上放置一个拦截器。这是很常见的,为了防止再次点击。拦截器只不过是“覆盖”整个浏览器的大掩码。它还可能有一个等待图标。