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

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

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

编辑:这是我给ajax的电话.在正常情况下,成功回调被调用.但是当我点击链接时,错误回调被调用!我正在考虑一些事情,可能是因为数据应该被格式化为JSON,但请求在中间被剪切,所以数据被认为是无效的,导致jQuery调用错误回调?但是为什么要求在中间被削减?

  1. $.ajax({
  2. type: (args.rel == "async" || args.rel == "dialog") ? "GET" : "POST",url: href,dataType: "json",data: args.data ? args.data:{},// send {} to ensure Content-Length header
  3. success: function(data){
  4. if (context) context.removeClass("ajax_wait");
  5. if (args.hideonwait) $(args.hideonwait).show();
  6. if (args.showonwait) $(args.showonwait).hide();
  7. if (spinner) remove_spinner(context,spinner);
  8. handle_response(args,context,target,data);
  9. },error: function(xhr,status,errorThrown){
  10. if (context) context.removeClass("ajax_wait");
  11. if (args.hideonwait) $(args.hideonwait).show();
  12. if (args.showonwait) $(args.showonwait).hide();
  13. if (spinner) remove_spinner(context,spinner);
  14. ajax_error(args,status + "-" + xhr.status,errorThrown ? errorThrown : xhr.responseText);
  15. }
  16. });

解决方法

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

Source

猜你在找的jQuery相关文章