jQuery的$就错误处理 [英] jQuery $.ajax error handling

查看:82
本文介绍了jQuery的$就错误处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  

可能重复:
   jQuery的Ajax错误的功能

我试图取代我可以从每个AJAX调用调用一个函数,一个全球性的ajax错误处理程序由于我们执行发现的问题。

  $(文件).ajaxError(函数(即jqXHR,设置例外){
    //使用BrowserDetect函数来获取浏览器信息
    VAR浏览器= BrowserDetect.browser;
    VAR browserVer = BrowserDetect.version;
    VAR browserOS = BrowserDetect.OS;
    VAR ajax_url = settings.url;
    $阿贾克斯({异步:真实,
            键入:POST,
            网址:AJAX_ERROR_LOG_URL,
            数据类型:JSON,
            数据: 'host='myhost.com&status='+jqXHR.status+'&error='+jqXHR.responseText+'&expmessage='+exception.message+'&url='
                       + ajax_url +'和;浏览器='+浏览器+'和; browserVer ='+ browserVer +'和; browserOS ='+ browserOS
    });
    如果(jqXHR.status === 0){
        final_message(ERROR_MSG +'0'); // 未连接。请验证网络连接。
    }否则,如果(jqXHR.status == 404){
        final_message(ERROR_MSG +'404'); //找不到请求的页面。 [404]
    }否则,如果(jqXHR.status == 500){
        final_message(ERROR_MSG +'500'); //内部服务器错误[500]。
    }否则,如果(例外===parsererror'){
        final_message(ERROR_MSG +'1'); //请求的JSON解析失败。
    }否则,如果(例外==='超时'){
        final_message(ERROR_MSG +'2'); //超时错误。
    }否则,如果(例外==='中止'){
        final_message(ERROR_MSG +'3'); // Ajax请求中止。
    } 其他 {
      如果(browserVer =='7'和;&安培;浏览器=='浏览器'){
        final_message(ERROR_MSG +'100'); //未捕获的错误
      } 其他 {
        final_message(ERROR_MSG +'99'); //未捕获的错误
      }
    }
});
 

我想将其转换为一个函数,并调用它是这样的:

  $ AJAX(异步{:真实,
        键入:POST,
        网址:网址,
        数据类型:JSON,
        数据:用户名=+用户名+&放大器;密码=+传球,
        成功:ajaxLoginResult
        错误:logAjaxError(jqXHR,textStatus,errorThrown)
});

功能logAjaxError(jqXHR,textStatus,errorThrown){
  //更多code在这里记录错误
}
 

问题在于,我不能让callpassed的错误回调了ajax的URL,所传递的唯一的东西就是jqXHR,textStatus,errorThrown。在.ajaxError设置,这些设置被传递,这是我们得到的URL。 任何想法?

编辑2/3: 下面是Add_Course功能给你看:

 函数Add_Course(原因){
  VAR事件ID = $('#事件ID'+ $('#oblevent code')ATTR('值')。)VAL()。
  VAR URL = AJAX_URL_ADDTOCART +事件ID +'SKU =?''和; mainitem =真放; PID ='+ PID;
  如果(理由!='礼券'){
    log_url(URL);
    $阿贾克斯({异步:真实,
            键入:POST,
            网址:网址,
            数据类型:JSON,
            成功:功能(数据){
              如果(data.result =='成功'){
                变种cemsg_index = reason.indexOf('CEMSG');
                如果(cemsg_index> = 0){
                  final_ce_message(reason.substr(cemsg_index + 6));
                } //如果(cemsg_index> = 0)
              } 其他 {
                $('#sm_content .oblcontent)HTML(data.message);
              } //如果(data.result =='成功')
            },
            完成:功能(jqXHR,textStatus){
              log_url(重定向到购物车');
              了window.location = CART_URL;
            } // 完成
    });
  }
}
 

解决方案

首先,在实际检查错误祝贺。因此,许多人写code,从来没有想到事情会出错的网际网路。哈。

而不是编辑每次调用 $。阿贾克斯您可以致电 $。ajaxSetup()有每一个电话用你的函数一个错误处理程序。错误处理程序签名错误(jqXHR,textStatus,errorThrown)这方便地匹配你的函数,所以要尽量调用 $ ajaxSetup({错误: logAjaxError})之前,你做任何 $。阿贾克斯的电话。

Possible Duplicate:
jQuery ajax error function

I am trying to replace a "global" ajax error handler with a function that I can call from each ajax call due to problems observed in our implementation.

$(document).ajaxError(function(e, jqXHR, settings, exception) {
    // using BrowserDetect function to get browser info
    var browser    = BrowserDetect.browser;
    var browserVer = BrowserDetect.version;
    var browserOS  = BrowserDetect.OS;
    var ajax_url   = settings.url;
    $.ajax({async: true, 
            type:     'POST',
            url:      AJAX_ERROR_LOG_URL, 
            dataType: 'json',
            data:     'host='myhost.com&status='+jqXHR.status+'&error='+jqXHR.responseText+'&expmessage='+exception.message+'&url=' 
                       +ajax_url+'&browser='+browser+'&browserVer='+browserVer+'&browserOS='+browserOS
    });
    if (jqXHR.status === 0) {
        final_message(ERROR_MSG + '0'); // Not connected. Please verify network is connected.
    } else if (jqXHR.status == 404) {
        final_message(ERROR_MSG + '404'); // Requested page not found. [404]
    } else if (jqXHR.status == 500) {
        final_message(ERROR_MSG + '500'); // Internal Server Error [500].
    } else if (exception === 'parsererror') {
        final_message(ERROR_MSG + '1'); // Requested JSON parse failed.
    } else if (exception === 'timeout') {
        final_message(ERROR_MSG + '2'); // Time out error.
    } else if (exception === 'abort') {
        final_message(ERROR_MSG + '3'); // Ajax request aborted.
    } else {
      if(browserVer == '7' && browser == 'Explorer') {
        final_message(ERROR_MSG + '100'); // Uncaught Error
      } else {
        final_message(ERROR_MSG + '99'); // Uncaught Error
      }
    }
});

I want to convert this to a function and call it like this:

$.ajax({async: true, 
        type:'POST',
        url: url, 
        dataType: 'json', 
        data:     "username="+username+"&password="+pass,
        success:  ajaxLoginResult
        error:    logAjaxError(jqXHR, textStatus, errorThrown)
});

function logAjaxError(jqXHR, textStatus, errorThrown) {
  // more code here to log the error
}

The problem lies in the fact that I cannot get the url of the ajax callpassed to the error callback as the only things that are passed is the jqXHR, textStatus, errorThrown. In the .ajaxError setup, the settings is passed and that is where we get the url from. Any ideas?

Edited 2/3: Here is the Add_Course function for you to see:

function Add_Course(reason) {
  var eventid = $('#eventid'+$('#obleventcode').attr('value')).val();
  var url = AJAX_URL_ADDTOCART + '?sku='+eventid+'&mainitem=true&pid='+pid;
  if(reason != 'VOUCHER'){
    log_url(url);
    $.ajax({async: true, 
            type:'POST',
            url: url, 
            dataType: 'json', 
            success: function(data){
              if(data.result=='success') {
                var cemsg_index=reason.indexOf('CEMSG');
                if(cemsg_index>=0) {
                  final_ce_message(reason.substr(cemsg_index+6));
                } // if(cemsg_index>=0)
              } else {
                $('#sm_content .oblcontent').html(data.message);
              } // if(data.result=='success')
            },
            complete: function(jqXHR, textStatus) {
              log_url('redirecting to cart');
              window.location = CART_URL;
            } // complete
    });
  }
}

解决方案

First, congratulations on actually checking for errors. So many people write code that never expect things to go wrong on the internets. Ha.

Rather than editing every call to $.ajax you can call $.ajaxSetup() to have every call use your function for an error handler. The error handler signature is error(jqXHR, textStatus, errorThrown) which conveniently matches your function, so try a call to $.ajaxSetup({ error: logAjaxError }) before you do any $.ajax calls.

这篇关于jQuery的$就错误处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆