#jquery #ajax #firefox
#jquery #ajax #firefox
Вопрос:
Я использую jQuery Ajax, как показано ниже:
$.ajax({
url: 'servlet/*****Servlet',
dataType: "text",
success: function(data) {
var subareaCoordsPGs = preprocessCoords(data);
}
});
он работает хорошо, даже если я не установил тип данных в Chrome, однако в FF произошел сбой с ошибкой синтаксического анализа XML.
Исходный
сервер заголовка ответа Apache-Coyote / 1.1
с фрагментированной передачей
Дата Вт, 04 октября 2011 00:08:08 GMT
Исходный
хост заголовка запроса localhost:8080
User-Agent Mozilla / 5.0 (Windows NT 5.2; WOW64; rv: 7.0.1) Gecko / 20100101 Firefox / 7.0.1
Принимает текст / обычный,/; q = 0.01
Принять-язык en-us, en; q = 0.5
Принять-Кодировка gzip, выкачать
Accept-Кодировка ISO-8859-1, utf-8; q = 0.7,; q = 0.7
Соединение поддерживается
по запросу X-с помощью реферера XMLHttpRequest
http://localhost:8080 /*/
Кэш-Контрольный максимальный возраст = 0Ошибка синтаксического анализа XML: неправильно сформирован Местоположение: moz-nullprincipal:{2f6a8381-b987-448b-88c2-e89c4e13440b} Номер строки 1, столбец 4:
534@151.248078368847 -33.9353900931769,151.247877472978
-33.9360784582012,151.24…
——^
после поиска я знаю, что хорошо установить правильный тип данных, я хочу, чтобы он анализировался так же, как обычный текст, но почему интеллектуальное предположение не работает в FF, даже если я явно установил его тип «текст»?
Комментарии:
1. Обратите внимание, что даже если вы получите это сообщение, ваш успешный вызов может быть запущен с данными. Последняя версия firefox может жаловаться, но затем все равно продолжить, или, по крайней мере, в моем случае Firefox 55 сделал. Это сообщение об ошибке некоторое время служило для меня отвлекающим маневром, поскольку я предполагал, что это фатально.
2. @J.Allen: Я сталкиваюсь с той же проблемой. Я вижу эту проблему в последней версии firefox. Есть идеи по ее устранению?
Ответ №1:
Ваш сервер не возвращает тип содержимого, поэтому Firefox предполагает, что, поскольку это _XML_HttpRequest, ваш ответ может быть XML и пытается его проанализировать. Когда это не удается, он прекращает попытки и сообщает, что это все-таки не XML.
Chrome, вероятно, делает то же самое, но ничего не сообщает.
Я предлагаю фактически отправить заголовок Content-Type, указывающий, каковы ваши данные.
Комментарии:
1. спасибо за подсказки. я установил тип содержимого text / plain;charset=UTF-8 с помощью jQuery Ajax, например, установил параметр ContentType: «text / plain; charset= UTF-8», и он по-прежнему работает для Chrome, но не для FireFox
2. @qc999 Я понятия не имею, что делает jQuery. Вызывает ли он overrideMimeType для объекта XHR?
3. @qc999 заголовок запроса — это не вопрос. Вопрос в том, каков заголовок ответа для Content-Type . И ваш сервер не отправляет его. Поэтому XHR возвращается к предположению, что это XML, если не указано иное
overrideMimeType
.4. @ Boris Zbarsky спасибо за помощь, я обнаружил, что ошибки все еще существуют. но если я установлю тип данных «текст», FireFox сможет его проанализировать. Даже некоторые Gson по-прежнему необходимо анализировать как обычный текст.
5. Чтобы установить правильный тип содержимого, я установил config в Appache или в .htaccess: AddType text / plain .hbs (все * .hbs должны поставляться с текстом типа содержимого.) Firefox был доволен.
Ответ №2:
Просто добавьте этот код. Проблема в том, что сервер не указал тип mime, и firefox принимает его за xml. Этот код укажет, каким Mime-типом будет ответ xhr.
beforeSend: function(xhr){ xhr.overrideMimeType( "text/plain; charset=x-user-defined" );},
Комментарии:
1. Или немного короче:
:beforeSend: function(xhr){ xhr.overrideMimeType( "text/plain; charset=utf-8" );},