JQuery междоменный Ajax JSONP вызывает случайные сбои по неизвестным причинам в некоторых версиях IE - PullRequest
4 голосов
/ 07 февраля 2012

Я делаю междоменные вызовы Ajax, используя последнюю версию jQuery 1.7.1. с ответом JSONP.

Я уже тщательно его протестировал на: Safari, Chrome, Opera, Firefox, IE6 IE7 IE8 IE9 (в режиме совместимости и нет) на Win XP и Win 7 - все они работают без нареканий. Никогда не подводил на нескольких тестах. Все они используют стандартные настройки по умолчанию с включенными JavaScript и Cookies.

В производственном процессе очень редко происходит сбой вызова, но у меня было несколько пользователей из сотен, у которых есть. Вероятно, один из 50 или 100. Я не могу понять это, потому что во всех случаях:

  • У пользователя не было проблем с междоменными вызовами ajax с использованием jQuery. (то есть не междоменные вызовы работали, поэтому они должны иметь включенный JavaScript и поддерживать ajax).

  • У пользователя были проблемы только с междоменными вызовами ajax с использованием jQuery. Даже после повторных попыток. То есть пользователь будет иметь проблему или нет, он не будет работать тогда, работать или работать, а затем отказывать. Только один или другой.

  • Вот пример строк пользовательских агентов, которые были затронуты:

    Mozilla / 5.0 (совместимо; MSIE 9.0; Windows NT 6.1; Trident / 5.0; FunWebProducts)

    Mozilla / 4.0 (совместимо; MSIE 8.0; Windows NT 5.1; Trident / 4.0; GTB7.2; .NET CLR 2.0.50727; .NET CLR 3.5.30729)

    Mozilla / 4.0 (совместимо; MSIE 8.0; Windows NT 6.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF; ibrytetoolbar_playbryte; .NET4.0C)

Кажется, это влияет только на IE, у меня никогда не было проблем с другими браузерами.

  • Проблема исчезнет, ​​если они используют другой браузер, я сказал им, чтобы установить Chrome.

  • Проблема не может быть связана с подключением, компьютером или ОС, так как смена браузеров сработала.

Я могу только исключить, что это должен быть параметр, который можно найти только в IE. У кого-нибудь была эта проблема? Кто-нибудь имеет представление о том, какая настройка IE может блокировать междоменные вызовы Ajax с ответом JSONP.

Это не может быть обычными проблемами AJAX / JSONP / Cross-domain, поскольку эти проблемы не возникают, когда браузеры установлены по умолчанию, а также потому, что я уже сделал это надлежащим образом: * строка метки времени в конце, чтобы остановить супер кэширование * JSONP ответ и т. д.

Я могу подтвердить, что звонок вообще не срабатывает.

Ответы [ 4 ]

1 голос
/ 16 февраля 2012

Эта проблема мучает меня и в последнее время.Мои исследования показывают, что вызовы jQuery ajax кэшируются IE, поэтому IE решает, что ему не нужно получать данные, которые объясняли бы, почему ничего не происходит.Эти вопросы SO помогли Остановить кеширование ответа загрузки jquery и getjson, возвращая кэшированные данные в IE8

Кажется, что дополнительная явная настройка ajax для отключения кэширования помогла IE получитьсообщение.Предполагается, что все вызовы ajax в jQuery позволяют избежать кэширования, когда json является типом данных, но я не уверен, что он работает.Это код, который мне помог, который вы вставили прямо перед вызовом getJSON () или ajax ().

$.ajaxSetup({ cache: false });

1 голос
/ 15 февраля 2012

Используйте Fiddler2 для проверки http-запросов и ответов и просмотра сообщений, передаваемых туда и обратно.

Также может возникнуть проблема с TCP / IP v6 под капотом.У нас были некоторые проблемы с IE в одном и том же контексте, и симптомы почти всегда были спорадическими.

0 голосов
/ 17 февраля 2012

У меня такое ощущение, что это связано с панелями инструментов / расширениями / шпионскими программами, которые установили пользователи.Из трех предоставленных UA один имеет FunWebProducts, один ibrytetoolbar_playbryte, а другой - панель инструментов Google, которая может вызывать проблемы, или это может быть что-то другое в их системе, которое, возможно, перехватывает запросы.Вы можете попробовать установить различные панели инструментов IE и посмотреть, можно ли воспроизвести проблему, но это может привести к нежелательным проблемам.Обойти это может быть невозможно.

0 голосов
/ 17 февраля 2012

Это попахивает проблемой синхронизации JavaScript. Поскольку вещи выполняются в любом порядке, который они чувствуют в JavaScript, проблема где-то еще может повлиять на вашу угрозу. То есть вы делаете свой запрос jsonp, но где-то в строке может что-то взорваться в вашей ветке и вызвать проблему в запросе. Я предполагаю, что вы, вероятно, где-то используете innerHtml или innerText, поскольку они иногда не поддерживаются, а иногда и поддерживаются.

...