Асинхронный запрос json javascript завершается неудачно с символами юникода только в IE - PullRequest
1 голос
/ 28 января 2011

Я делаю ajax-запрос

$.ajax({
    url: (some url),
    dataType: "json",
    error: function(xhr, textStatus, errorThrown) {
        (error handler)         
    },
    data : requestData,
    success: function(data) {
        (success handler)
    }
});

Отлично работает в браузерах Opera / Firefox / Webkit.Тем не менее, при использовании IE и наличииpecsestData, содержащего некоторые строки с символами, отличными от ascii (например, ł), возвращается ошибка, и статус xhr равен 12031. Обратите внимание, что даже замена URL на какой-либо существующий документ не дает статуса 404 (однако в Opera и т. Д.), поэтому я думаю, что запрос вообще не выполняется.

О упомянутом дубликате: к сожалению, он мне не помог.Попытка encodeURIComponent без результата (и неудивительно, потому что jquery автоматически делает это, когда объект передается в requestData).Даже жестко закодированный запрос (переданный в виде строки), но он тоже не работает.

ОБНОВЛЕНИЕ: запрос будет работать с данными не ascii, если они кэшируются в IE.Это означает, что я могу скопировать подготовленный URL-адрес XHR, вставить его в другую вкладку IE, а затем обновить исходную страницу с помощью ajax и не получать ошибок.

ОБНОВЛЕНИЕ снова: Исправлено.То, что не было закодировано должным образом, было URL реферера, данным в запросе ajax.Он содержал хэш с не ascii символом (однако, если он кэшировался, работал нормально).Спасибо за ваши усилия.

1 Ответ

1 голос
/ 28 января 2011

Помните, что ваш вызов Ajax должен соответствовать UTF8, так как вы не указываете кодировку, тогда это значение по умолчанию.

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

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