2015-11-14 2 views
0

У меня есть функция Javascript, где я получаю данные через JSONP с моего сервера. Я попытался имитировать ошибки сервера или отсутствие доступа в Интернет (он должен запускаться в приложении cordova, поэтому клиент не имеет доступа в Интернет), но я не могу поймать ошибку. Вот мой код:jQuery jsonp catch «Не удалось загрузить ресурсы ...»

var completed = false; 
jQuery.ajax({ 
    url: "http://www.someDomainThatDoesn'tWork.com/getsContent.php?callback=?", 
    dataType: "json", 
    success: function(data) { 
     completed = true 
     console.log(data); 
    }, 
    error: function() { 
     console.log("fail");    
    }, 
    statusCode: { 
     404: function() { 
      console.log("fail 2"); 
     } 
    } 
}).fail(function() { 
    console.log("fail 3"); 
}).always(function() { 
    if (!completed) { 
     console.log("fail 4"); 
    } 
}); 

Как вы можете видеть, я пытаюсь поймать (разные) ошибки в четырех местах. Однако, если я, например, изменить URL, чтобы тот, который не существует, Javascript просто прерывает и дать мне ошибку

Не удалось загрузить ресурс: сервер ответил со статусом 404 (Не найдено)

и ни одна из ловушек ошибки не выполняется.

В документации jQuery.ajax() он говорит

Примечание: Этот обработчик не вызывается для междоменного сценария и запросов JSONP между доменами. , поэтому я не должен удивляться.

Есть ли способ уловить эту ошибку? Я также попытался обнять его с помощью

try{} catch(error) {} 

но это тоже не делает.

ответ

0

Поскольку метод JSONP возвращает сценарий, он, вероятно, терпит неудачу, возможно, вам придется изменить свой сервер на использование CORS и не использовать JSONP, чтобы иметь возможность правильно обрабатывать ошибки.