$ jQuery .get () набор символов ответа, когда никакой заголовок не установлен?

Я просто недавно установил Запрашивающую сторону Песни Winamp, которая является веб-плагином запрашивающей стороны песни Winamp с созданным в минимальном HTTP Сервер CGI.

То, что делает плагин, - то, что он выполняет веб-сервер, служит странице HTML с некоторыми специальными переменными, которые он заменяет фактическими данными по запросу (плей-лист, очередь запроса, время, оставленное в песне и т.д.).

Я рассматривал это как забавный и хороший проект изучить некоторый jQuery, таким образом, я запустил присоединение мой собственный код js, чтобы заменить, зафиксировать и ajaxify подаваемый веб-сайт от плагина, но я теперь столкнулся с проблемой с кодировкой символов.

На странице Вы получаете ссылки на все песни в плей-листе. Когда Вы нажимаете на одну из ссылок, я поднял трубку свою собственную функцию щелчка jQuery. Таким образом вместо того, чтобы перезагрузить целую страницу, когда Вы запрашиваете песню, я делаю a $.get($(this).attr('href', function(response) {... code ...}) и затем я использую replaceWith для замены текущей очереди новой сгенерированной очередью с запросом, добавленным на лету. Я делаю то же самое для показывания/обновления в настоящее время проигрывания и на поиске так, чтобы все было выбрано в фоновом режиме и затем заменило на лету некоторыми добавленными анимациями.

Весь jQuery/Ajax работает отлично, но большая проблема, которую я имею, с набором символов и с названиями песни в очереди/плей-листе. Специальные символы (åäöé и т.д.) на имена не работают вообще.

Сменные выводы все в iso-8859-1/latin1 и мой метатег в разметке говорят браузеру, что эта страница является latin1. На нормальном обновлении страницы в браузере это работает хорошо и дисплей специальных символов как нормальный. Но когда я использую jQuery и $.get() для замены блоков кода на лету, специальные символы только обнаруживаются как?.

Я думаю, что проблема заключается во что значения по умолчанию jQuery, чтобы полагать что $.get() ответ является UTF-8, если ни в каком заголовке не говорится иначе. Плагин не устанавливает заголовка для кодирования/набора символов вообще и так как я не имею никакого контроля во всем бэкенде и какие заголовки установлены, я не могу изменить это.

Единственные заголовки я вхожу в ответ от плагина:

Сервер: WinampServer
Соединение:закрыть
Тип контента: текст/HTML

Я надеюсь, что Вы понимаете мою проблему. У меня есть страница, где я не имею никакого контроля в на всем протяжении бэкенда и всего, с чем я должен работать, сгенерированный HTML. Я не могу изменить или добавить заголовки в ответах. Я должен сказать jQuery, что ответ находится на самом деле в latin1 и не UTF-8 так, чтобы кодирование специальных символов не повреждалось. Я попробовал scriptCharset: 'iso-8859-1' в jQuerys ajaxSetup, но который только работает с типом script/json и я работаю с ответами HTML.

Какая-либо идея, если это возможно или какое-либо другое обходное решение, Вы могли бы думать о?

6
задан Priyanga 18 October 2019 в 13:37
поделиться

3 ответа

править: хорошо я думаю, что это работает (по крайней мере, это работало в моей тестовой среде, посмотрите изменения для предыдущей попытки),

$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('text/html; charset=UTF-8');
    },
});
$('#stuff').load('/yourresource.file'); // your ajax load

то, что я имел, было основным файлом, начинаются UTF-8 и файл данных начался ISO-8859-1. без вышеупомянутого кода я получил набор мусора для тестовой строки åäöé, как ожидалось. с вышеупомянутым кодом это загрузило åäöé, правильно закодированный.

29
ответ дан 8 December 2019 в 03:28
поделиться

Это должно только указать, что, в то время как overrideMimeType () метод доступен в Основанных на гекконе браузерах (Firefox...), это НЕ находится в IE (по крайней мере <=7) и там, кажется, не обходное решение. (Я не знаю о доступности в других браузерах.)

0
ответ дан 8 December 2019 в 03:28
поделиться

Сначала, было бы лучше при использовании более общего $ .ajax () функция.

Согласно документации существует scriptCharset опция, однако это только применимо в определенных типах данных. Также указано, что это необходимо, только если кодирование страницы вызова отличается.

0
ответ дан 8 December 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: