Вход

Просмотр полной версии : $.getJSON не работает в ie9, ie8, ie7 (кроссдоменный)


Neznayka
10.07.2013, 12:13
Добрый день. Такая проблема, при попытке отправить запрос в ie9, ie8, ie7 $.getJSON на сервер, ничего не происходит, в остальных браузерах, включая и ie10 все работает.
Код :
var url = 'http://sven-soft.ru/ajax/j.server.php?type=3&synonym=' + $(this).val(); //url фиктивный
$.getJSON(url, function(json)
{
alert('123');
});

на стороне сервера все заголовки установлены (CORS) :

header('XDomainRequestAllowed: 1');
header("Access-Control-Allow-Origin: *"); // кроссдоменный доступ для всех
//header('Content-type: text/plain; charset=utf-8');
header('Content-type: application/json; charset=utf-8');
header('Cache-Control: no-store, no-cache'); // не кешировать
header('Expires: ' . date('r'));

все файлы в utr-8 без BOM.
В ie9, ie8, ie7 (6-ой не трогаю уже) не работает, никаких ошибок, ничего нет, просто не вызывается обратная функция, в консоле даже не происходит запрос на сервер.
Попробовал такой вариант :

var options = {
url: url, // скрипт обработки
type: 'GET', // метод
dataType: 'json', // тип возврщаемых данных
success: processJson, // обработчик
crossDomain: true,
cache: false
};

$.ajax(options);
function processJson(json)
{
alert('123');
}

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

var date = new Date();
var url = 'http://sven-soft.ru/ajax/j.server.php?type=3&synonym=' + $(this).val() + '&bred=' + date;

вообщем тоже ничего, тихо молча ничего не посылается.
Процедура, в которой делается этот запрос отрабатывает до момента посыла запроса, дальше ничего не происходит..
Версия jquery библиотеки 1.9.0, дополнительно опробовал на 1.10.1, такой-же результат

Незнаю куда дальше копать, подскажите пожалуйста.

danik.js
10.07.2013, 13:27
Во-первых, IE7 не поддерживает кроссдоменные запросы.
Во-вторых, судя по всему jQuery не обеспечивает кроссбраузерный вариант запроса. В IE8-9 нужно использовать особый объект XDomainRequest вместо XMLHttpRequest. И кажется он имеет некоторые ограничения.

Neznayka
10.07.2013, 13:34
Во-вторых, судя по всему jQuery не обеспечивает кроссбраузерный вариант запроса.
Чего-то я сомневаюсь в этом. Изначально jQuery реализован на идее, делать все кроссбраузерно. Мне кажется, что просто какой-то детали нехватает (параметр, еще что-то), чтобы он заработал. А вот какой именно, это конечно вопрос.

danik.js
10.07.2013, 14:12
Изначально jQuery реализован на идее, делать все кроссбраузерно.
В данном случае полная кроссбраузерность невозможна. Думаю именно поэтому разработчики отказались делать с этим что-либо вообще.
Вот дискуссия по данному багу http://bugs.jquery.com/ticket/8283
Вот плагин: https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
Вот статья об ограничениях XDomainRequest: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

Neznayka
10.07.2013, 14:42
Вот дискуссия по данному багу http://bugs.jquery.com/ticket/8283
Вот плагин: https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
Вот статья об ограничениях XDomainRequest: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

Огромное спасибо! Даже и не мог подумать, что вот так обстоят дела в jquery с кроссдоменным и кроссбраузерным ajax. Раньше на чистом javascripte все это успешно делал, пересел на jquery - который вроде как кроссбраузерный и такая засада.. Еще раз спасибо!