【问题标题】:How to Handle jsonp errors?如何处理 jsonp 错误?
【发布时间】:2012-03-05 19:31:35
【问题描述】:

我正在使用 jquery.ajax() 发出 jsonp 请求,如下所示:

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

没事的时候,请求的页面正常调用我的回调函数。

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

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

谢谢!

(对不起我的英语不好)

【问题讨论】:

    标签: javascript jquery jsonp


    【解决方案1】:

    您可以在 $.ajax() 调用上设置超时,并通过该机制处理缺乏响应。

    $.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);
          }
      }
    });​
    

    【讨论】:

    • 问题是来自服务器的空响应是一个有效的<script> 元素。请注意,JSONP 不是用 XMLHttpRequest 完成的,超时机制可能在 IE 中不起作用。
    • 我将他的“不返回任何内容”解释为超时,而不是空白响应。
    • 是的,这可能就是他的意思,但即便如此,浏览器在提供有关动态添加的<script> 标签的反馈方面也不是很可靠。
    【解决方案2】:

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

    【讨论】:

    • 已经怀疑了。如果服务器没有返回任何东西。我应付不来。
    【解决方案3】:

    如果您请求的页面没有返回任何内容,那么您需要将其包装在一些代码中,以便它在一些 JSON 中返回错误代码。所以,你可以用一些有超时的东西来装饰请求服务,然后返回一些可能是的 json:

    {
       errorCode: "requestTimeout"
    }
    

    【讨论】:

      【解决方案4】:

      我在 $.ajax 错误设置中使用 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);
                  }
                 }
             }
          });
      }
      

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-02
        • 2013-04-08
        • 2013-10-02
        • 2011-12-02
        • 2012-10-12
        • 1970-01-01
        相关资源
        最近更新 更多