Почему dojo.io.script.get () не выполняет предоставленную функцию ошибки при получении 404? - PullRequest
2 голосов
/ 11 марта 2011

Я пытаюсь использовать следующее для получения междоменного домена:

dojo.io.script.get({
  url: myUrl,
  callbackParamName: "callback",
  preventCache: true,
  load: dojo.hitch( this, loadFunction ),
  error: dojo.hitch( this, function() {
    console.log('Error!!!');
  })
}); 

Функция загрузки работает нормально, однако, когда сервер возвращает 404, функция ошибки не запускается.Может кто-нибудь сказать мне, почему?

РЕДАКТИРОВАТЬ

После некоторого исследования я обнаружил, что тайм-аут и обработчик могут быть реализованы следующим образом:

dojo.io.script.get({
  url: myUrl,
  callbackParamName: "callback",
  timeout: 2000
}).then(function(data){
  console.log(data);
}, function(error){
  alert(error);
});

Используется функциональность, предоставляемая объектом dojo.Deferred.

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

При обращении к серверу с тегами сценария (то, что делает dojo.io.script.get), код состояния и заголовки недоступны.

Вы можете попробовать другие способы обнаружения проблемы, такие как использование тайм-аута и анализ содержимого скрипта. Последнее проблематично для вызовов JSONP (как в вашем примере).

0 голосов
/ 10 апреля 2014

Я понимаю, что это старый, но я думал, что поделюсь решением в случае, если другие, как и я, сталкивались с этой темой.

dojo.io.script по существу добавляет <script/> на вашу HTML-страницу.Таким образом, вы можете попробовать это:

    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', myUrl);
    script.onerror = function() {
        debugger
    }
    script.onload = function() {
        debugger
    }
    document.getElementsByTagName('body')[0].appendChild(script);

Таким образом, если скрипт не может загрузить событие, вызывается событие onerror.

* Это может работать не во всех случаях, но является хорошим началом

...