JQuery AJAX перестал работать с iOS 5.0.1 - PullRequest
4 голосов
/ 09 февраля 2012

Следующая часть логики, используемая для работы с jquery 1.4.4 и 1.7.1 на всех поддерживаемых нами мобильных устройствах:

$.ajax({
  url: 'http://www.example.com/someurl',
  type: 'GET',
  dataType: 'text',
  timeout: 60000,
  success: function(data) {
    alert(data);
  },
  error: function(jqXHR) {
    alert(jqXHR.state());
  }
});

Но с iOS 5.0.1 вышеприведенноефункция ошибки, предупреждающая rejected без каких-либо реальных запросов HTTP.Похоже, что ровно один AJAX-запрос будет работать, прежде чем мне нужно будет перезагрузить свой iPhone.Это известная проблема jquery / iOS 5.0?Как я могу отладить это?Есть ли обходной путь?Я не знаю, с чего начать.

ПРИМЕЧАНИЕ : Я заметил на стороне сервера, что вместо GET запросов выдается OPTIONS запросов.Кажется, это связано с вопросом:

http://spin.atomicobject.com/2012/01/20/mobile-safari-on-ios-5-1-unexpectedly-making-cross-origin-resource-sharing-requests/

Ответы [ 3 ]

5 голосов
/ 09 февраля 2012

Ссылка, которую я указал в вопросе, фактически указывает на решение.Некоторые из моих запросов ajax используются для получения URL-адресов PDF-файлов, которые передаются с использованием

Content-Disposition: attachment; filename="somename.pdf"

. Очевидно, это вызывает серьезные проблемы в iOS 5.0 в Safari, нарушая объект XMLHttpRequest (это неJQuery).Псих.Вот ссылка снова:

http://spin.atomicobject.com/2012/01/20/mobile-safari-on-ios-5-1-unexpectedly-making-cross-origin-resource-sharing-requests/

1 голос
/ 10 мая 2012

Спасибо за расследование.Я с той же проблемой.После получения файла в виде «вложения» Mobile Safari отправляет запрос OPTIONS при вызове:

$.ajax('/url')

НО, если я запускаю следующий код из того же файла, он генерирует действительный запрос GET:

http = new XMLHttpRequest()     
http.open("GET", "/url")
http.send()

Почему jQuery не работает, а XMLHttpRequest работает здесь?

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

Причиной ошибки является та же политика происхождения. Это позволяет только вам делать XMLHTTPRequests для вашего собственного домена. Посмотрите, можете ли вы использовать JSON вместо этого.

Ссылки и рекомендуемые ресурсы;
https://stackoverflow.com/a/1109261/896341
http://api.jquery.com/jQuery.getJSON/
http://www.w3.org/Security/wiki/Same_Origin_Policy
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...