В онлайн-приложении моей компании мы настроили API на основе JSONP, который возвращает некоторые данные, используемые букмарклетом, который я разрабатываю. Вот небольшая тестовая страница, которую я настроил и которая обращается к URL API, используя метод jQuery $.ajax()
:
http://troy.onespot.com/static/3915/index.html
Если вы посмотрите на запросы, используя вкладку «Сеть» Firebug (или тому подобное), вы увидите, что происходит то, что URL запрашивается успешно, но поскольку наше приложение перенаправляет всех неавторизованных пользователей на страницу входа, Страница входа также запрашивается браузером и, по-видимому, интерпретируется как JavaScript. Это неизбежно вызывает исключение, поскольку страница входа - это HTML, а не JavaScript.
По сути, я ищу какой-либо хук, чтобы определить, когда запрос приводит к перенаправлению - какой-то способ определить, разрешается ли URL-адрес в ответ JSONP (который будет выполнять метод, который я предопределил в сценарии bookmarklet ) или если это привело к перенаправлению. Я попытался обернуть метод $.ajax()
в блок try {} catch(e) {}
, но это исключение не перехватывает ловушку, я предполагаю, потому что запросы были успешными, а не синтаксический анализ страницы входа в систему как JavaScript. Можно ли где-нибудь использовать блок try {} catch(e) {}
или любое свойство $.ajax()
, которое может позволить мне отследить исключение или иным образом определить, что я был перенаправлен?
На самом деле я сомневаюсь, что это возможно, поскольку $.getScript()
(или эквивалентная установка $.ajax()
) просто динамически загружает скрипт и не может проверять заголовки ответа, так как он междоменный, а не настоящий AJAX:
http://api.jquery.com/jQuery.getScript/
Мой альтернативный вариант - просто отключить $.ajax()
на некоторое время, пока я не получу обратный вызов JSONP или не получу, а в последнем случае предположим, что пользователь не вошел в систему, и предложим ему выполнить так. Однако этот метод мне не нравится, так как он приведет к большому количеству ненужных запросов к серверу приложений, а также приведет к накоплению исключений JavaScript.
Спасибо за любые предложения!