jquery – 在Ajax请求中间更改页面

前端之家收集整理的这篇文章主要介绍了jquery – 在Ajax请求中间更改页面前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我发送一些ajax请求,并在请求返回之前立即更改页面(比如说一些链接)会发生什么?我的意思是说,XHR对象向网站发送一个请求,但是在检索到响应之前,它会被删除(因为页面被更改),所以应该将响应发送到哪里?

我问这个问题是因为我的网站有一个奇怪的问题.我有一个页面,通过Ajax请求从数据存储中加载帖子.如果在加载完成之前,我点击一个链接,我得到了jQuery.ajax的onerror称为!不知道为什么会这样.

编辑:这是我给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,status + "-" + xhr.status,errorThrown ? errorThrown : xhr.responseText);
  }
});

解决方法

诀窍是检查XMLHttpRequest对象中的响应头.如果没有响应头(null或空字符串,具体取决于浏览器),服务器尚未响应.这意味着用户中止了.
$.ajax({
    url: "url-to-go-here",success: function() {
    },textStatus,errorThrown) {
        if(!isUserAborted(xhr)) {
            console.log("Ajax Error")
        }
    }
});

function isUserAborted(xhr) {
  return !xhr.getAllResponseHeaders();
}

Source

猜你在找的jQuery相关文章