2010-04-19 111 views
2

我用这个伪类,使Ajax请求到服务器:jQuery的Ajax请求返回的错误和状态0

function RequestManager(url, params, success, error){ 
    //Save this Ajax configuration 
    this._ajaxCall = null; 
    this._url= url; 
    this._type = params.type; 
    this._success = function(){ 
     alert("ok"); 
    }; 
    this._error = function(){ 
     alert("ko"); 
    }; 
} 

RequestManager.prototype = { 
    require : function(text){ 
     var self = this; 
     this._ajaxCall = $.ajax({ 
      url: this._url, 
      type: this._type, 
      data: text, 
      success: function(xmlResponse){ 
       var responseArray = []; 
       var response = _extractElements(xmlResponse, arrayResponse); 
       self._success(response); 
      }, 
      error: self._error, 
      complete : function(xhr, statusText){ 
       alert(xhr.status); 
       return null; 
      } 
     }); 
    } 

这是一个将被载入PHP:

<?php 
    header('Content-type: text/xml'); 

    //Do something 
    $done = true; 

    $response = buildXML($done); 
    $xmlString = $response->saveXML(); 
    echo $xmlString; 

    function buildXML ($done){ 
     $response = new SimpleXMLElement("<response></response>"); 
     if($done){ 
      $response->addChild('outcome','ok'); 
     } 
     else { 
      $response->addChild('outcome', 'ko'); 
     } 
     return $response; 
    } 

当我实例化一个新的对象,我用它来加载请求,它总是返回给我错误,并且状态代码是0.服务器正确地生成一个XML文档。为什么我无法获得正确的200代码?

回答

2

如果第二次调用require时发生这种情况,这是因为调用abort()会导致您的回调被调用时的状态代码为0.您应该稍后为第二个请求获得正确的结果。

在jQuery 1.4中还有一个错误,其中您的success回调是在中止请求后调用的。见my answer to Request periodically coming back empty under race conditions

与此问题无关,您的代码中有变量(timerajaxCall),似乎在引用下划线和不带引号的情况下都被引用。

+0

好的,问题出在另一个代码块,无论如何你的信息是有用的。谢谢 – 2010-04-19 19:57:58

+1

问题是什么? – katrin 2012-09-06 09:23:19