Обнаружить ошибку 404 из включенного файла JavaScript - PullRequest
3 голосов
/ 05 июля 2011

Я выполняю междоменный вызов JSON (P), используя JavaScript для добавления тега <script> в DOM с тем URL-адресом, который я хочу включить в качестве src.Загружаемый скрипт имеет функцию обратного вызова, которая вызывает функцию на моей странице, и нужные мне данные возвращаются в качестве аргумента функции.

Хотя есть 2 перехвата:

  1. Иногда страница JSONP возвращает ошибку 400 или 404.
  2. Один и тот же файл JSONP можно запрашивать несколько раз на одной странице (каждый раз возвращая разные данные)

Итак,Мне нужно определить, когда функция обратного вызова не запущена (что указывает на то, что файл JSONP вернул ошибку), но мне также необходимо учитывать тот факт, что один и тот же файл может быть запрошен дважды.По сути, мне нужно обнаружить ошибку при загрузке страницы, но я должен сделать это до завершения загрузки других файлов.И да, файлы должны быть загружены (или возвращать ошибку) в правильном порядке.

Одно (неэффективное) решение:

Я мог бы сделать кучу разныхфункции, которые запрашиваются для каждой отдельной загрузки файла (например, callbackFunction0, callbackFunction1 и т. д.).Таким образом, я могу просто определить, когда одна из функций не сработала, и мой JavaScript отключился.Однако, это заняло бы много места и было бы неэффективно, потому что мне потребовалась бы одна функция callbackFunction для максимального времени загрузки скрипта на той же странице (хотя это число не имеет определенного значения, поэтому, если бы я только сделал 15функции и сценарий запрашивался 20 раз, при этом возникали ошибки).

Это было довольно сложно объяснить, но, надеюсь, вы поняли идею.Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

$. Ajax имеет множество функций обратного вызова, которые вы можете использовать.

$.ajax({
      url: "test.html?callback=?",
      dataType: "jsonp",
      success: function(data){
        // your logic
      }
      statusCode: {
        404: function() {
          alert('page not found');
        }
      }
});
1 голос
/ 05 июля 2011

Вы можете просто добавить аргумент к функции обратного вызова, содержащий идентификатор / номер / позицию скрипта.Так что-то вроде callbackFunction (1, ... остальные аргументы ..).Нет необходимости создавать новые имена функций.

Вы можете обнаружить ошибку, прикрепив событие onerror к элементу script.Несколько связано: Как вызвать script.onerror в Internet Explorer?

0 голосов
/ 06 июля 2011

Чтобы решить эту проблему, я включил в функцию обратного вызова переменную, содержащую номер запроса. Таким образом, обратный вызов может быть var requestnumber=0;callbackFunction. Тогда я мог бы выяснить, какой запрос применяется к какому элементу. Я должен был подумать об этом раньше.

...