Ajax请求未检测到500错误

Ajax请求未检测到500错误,ajax,request,prototype,Ajax,Request,Prototype,我使用的是prototype 1.6.1。该功能设计为在该功能打开时每5秒向服务器发送一次请求。它在大多数情况下都能工作,但偶尔会有一个请求返回500个内部服务器错误。当这种情况发生时,函数并不认为它是成功还是失败,所以它只是完全停止函数。我不明白为什么这会发生在我的一生中 我在下面附上了一些代码。我已经清理了函数的一些部分,使其更易于诊断。您是否可以从中看到一些东西,使其无法将500内部服务器错误识别为成功或失败 原型1.6.1: function AjaxRequest (url, opts

我使用的是prototype 1.6.1。该功能设计为在该功能打开时每5秒向服务器发送一次请求。它在大多数情况下都能工作,但偶尔会有一个请求返回500个内部服务器错误。当这种情况发生时,函数并不认为它是成功还是失败,所以它只是完全停止函数。我不明白为什么这会发生在我的一生中

我在下面附上了一些代码。我已经清理了函数的一些部分,使其更易于诊断。您是否可以从中看到一些东西,使其无法将500内部服务器错误识别为成功或失败

原型1.6.1:

function AjaxRequest (url, opts){
  var headers = {
    'X-Requested-With': 'XMLHttpRequest',
    'X-Prototype-Version': '1.6.1',
    'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
  };
  var ajax = null;

  if (window.XMLHttpRequest)
    ajax=new XMLHttpRequest();
  else
    ajax=new ActiveXObject("Microsoft.XMLHTTP");

  if (opts.method==null || opts.method=='')
    method = 'GET';
  else
    method = opts.method.toUpperCase();  

  if (method == 'POST'){
    headers['Content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
  } else if (method == 'GET'){
    addUrlArgs (url, opts.parameters);
  }

  ajax.onreadystatechange = function(){
//  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; states 0-4
    if (ajax.readyState==4) {
      if (ajax.status >= 200 && ajax.status < 305)
        if (opts.onSuccess) opts.onSuccess(ajax);
      else
        if (opts.onFailure) opts.onFailure(ajax);
    } else {
      if (opts.onChange) opts.onChange (ajax);
    }
  }  

  ajax.open(method, url, true);   // always async!

  for (var k in headers)
    ajax.setRequestHeader (k, headers[k]);
  if (matTypeof(opts.requestHeaders)=='object')
    for (var k in opts.requestHeaders)
      ajax.setRequestHeader (k, opts.requestHeaders[k]);

  if (method == 'POST'){
    var a = [];
    for (k in opts.parameters){
      if(matTypeof(opts.parameters[k]) == 'object')
        for(var h in opts.parameters[k])
            a.push (k+'['+h+'] ='+ opts.parameters[k][h] );
      else
        a.push (k +'='+ opts.parameters[k] );
    }
    ajax.send (a.join ('&'));
  } else               {
    ajax.send();
  }
}  
 sendRequest: function(p,callback,r,retry, CrestDataNum){
    var t = Tabs.Crest;
    new AjaxRequest(unsafeWindow.g_ajaxpath + "ajax/crest.php" + unsafeWindow.g_ajaxsuffix, {    
         method: "post",
         parameters: p,
         loading: true,

         onSuccess: function (transport) {       
            var rslt = eval("(" + transport.responseText + ")");
            if (rslt.ok) {
                setTimeout (function(){callback(r,0,parseInt(CrestDataNum)+1);},(1000)); //Goes to next request   
                return;
            } 
        },
         onFailure: function () { 
            setTimeout (function(){callback(r,retry,CrestDataNum);}, 5000); //repeats request on failure
            return;
         }
      });    
},