Как обрабатывать ошибки JSONP? - PullRequest
1 голос
/ 02 марта 2012

Я делаю запрос jsonp с помощью jquery.ajax () следующим образом:

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

Когда все в порядке, запрашиваемая страница обычно вызывает мою функцию обратного вызова.

Но в некоторых ситуациях запрашиваемая страница ничего не возвращает.

Как я могу обработать эту ошибку, поскольку она не будет вызывать функцию обратного вызова?

Спасибо!

(извините за мой плохой английский)

Ответы [ 4 ]

0 голосов
/ 05 марта 2012

Я обработал ошибку с помощью textStatus == "parsererror" в настройке ошибки $ .ajax.

Теперь моя функция выглядит так:

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);
            }
           }
       }
    });
}

Спасибо

0 голосов
/ 02 марта 2012

Если запрашиваемая страница ничего не возвращает, вам нужно обернуть ее в некоторый код, чтобы он возвращал код ошибки в некотором JSON.Таким образом, вы можете украсить службу запросов чем-то, у которого есть тайм-аут, а затем вернуть некоторый json, который может быть:

{
   errorCode: "requestTimeout"
}
0 голосов
/ 02 марта 2012

Вы можете установить время ожидания для вашего вызова $ .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);
      }
  }
});​
0 голосов
/ 02 марта 2012

Вы не можете справиться с этим.Сервер должен быть настроен так, чтобы он всегда возвращал некоторый JavaScript, который в случае ошибки может быть чем-то, что вызывает некоторую предварительно организованную функцию обработчика ошибок, или что-то, что кажется подходящим.

...