2012-03-02 160 views
1

我正在与jquery.ajax JSONP请求()这样的:如何处理jsonp错误?

var cep = 99999999; 
$.ajax({ 
    url: "http://cep.paicon.com.br/jsonp/"+ cep +"?callback=addressFunction", 
    dataType: 'jsonp', 
    crossDomain: true, 
    jsonp: false 
}) 

当好了,被请求的页面调用我的回调函数正常。

但是,在某些情况下,请求的页面不会返回任何内容。

我该如何处理这个错误,因为它不会调用任何回调函数?

谢谢!

(对不起,对我差劲的英语)

回答

0

您可以在$阿贾克斯()调用设置超时,并处理缺乏反应通过这个机制。

$.ajax({ 
    url: "http://cep.paicon.com.br/jsonp/"+ cep +"?callback=addressFunction", 
    type: "GET", 
    dataType: "jsonp", 
    timeout: 2000, 
    success: function(response) { alert(response); }, 
    error: function(x, t, m) { 
     if(t==="timeout") { 
      alert("got timeout"); 
     } else { 
      alert(t); 
     } 
    } 
});​ 
+0

问题是来自服务器的空响应是有效的'

0

你不能处理。必须使服务器始终返回一些JavaScript,在出现错误的情况下,可能会调用某些预先安排的错误处理函数或任何看起来合适的东西。

+0

已经怀疑。如果服务器不返回任何东西,则返回 。我无法处理。 – matheusvmbruno 2012-03-02 14:33:25

0

如果您请求的页面不返回任何内容,那么你需要,因此在一些JSON返回错误代码把它包起来的一些代码。所以,你可以装饰的东西,有一个超时请求服务,然后返回一些JSON可能是:

{ 
    errorCode: "requestTimeout" 
} 
0

我在$就错误设定textStatus == “parsererror” 处理错误。

现在我的功能就是这样:

function buscaEndereco(cep){ 
    url = "http://cep.paicon.com.br/jsonp/"+ cep; 
    $.ajax({ 
     url: url, 
     type: "GET", 
     dataType: 'jsonp', 
     crossDomain: true, 
     timeout: 10000, 
     success: function(response){ 
      montaEndereco(response); 
     }, 
     error: function(x, t, m){ 
      if(t == "timeout"){ 
      alert("Timeout"); 
      } else { 
      if(t == "parsererror"){ 
       alert("CEP not found"); 
      } else { 
       alert(t); 
      } 
      } 
     } 
    }); 
} 

感谢