Почему jQuery настаивает на том, что мой обычный текст не "правильно сформирован"? - PullRequest
7 голосов
/ 01 декабря 2009

Я делаю AJAX-вызов для получения простого текста:

$.ajax({
  url:         "programData.txt",
  type:        "GET",
  dataType:    "text",
  cache:       false,
  success:     processData
});

Когда я делаю запрос, я получаю следующую ошибку:

Ошибка: не правильно сформирован Исходный файл: file: ///projects/foo/programData.txt? _ = 1259694590361 Строка: 1, столбец: 2

Почему jQuery пытается обработать мой обычный текст и как его остановить?

Ответы [ 5 ]

12 голосов
/ 18 апреля 2011

Firefox пытается проанализировать файл как HTML, прежде чем он даже вернет его обратно в jQuery.

Есть несколько причин, почему он может пытаться это сделать. Если, как предположил Яанус, вы используете URL-адрес file: // или chrome: //, тогда он не имеет типа MIME и предполагает использование HTML. Или ваш HTTP-сервер может возвращать неправильный тип MIME.

Начиная с jQuery 1.5.1, существует опция mimeType для переопределения возвращаемого типа MIME, который видит Firefox. Таким образом, вы можете сделать следующее:

$.ajax({
  mimeType: 'text/plain; charset=x-user-defined',
  url:         "programData.txt",
  type:        "GET",
  dataType:    "text",
  cache:       false,
  success:     processData
});

Параметр Doc on mimeType находится по адресу http://api.jquery.com/jQuery.ajax/

А вот некоторые сведения о том, что происходит на уровне Firefox: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data

11 голосов
/ 01 декабря 2009

Вы загружаете страницу в браузере по HTTP или просто открываете ее как обычный файл? Адрес страницы, на которой запущен JavaScript, начинается с http: или file:? Я подозреваю, что это последнее, и Ajax-вызовы работают по-другому в этой ситуации (см. Ответ tvanfonsson ниже). Если вы создаете веб-приложение, которое позже будет обслуживаться по протоколу HTTP, попробуйте запустить страницу с помощью локального HTTP-сервера.

3 голосов
/ 01 декабря 2009

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

Ссылка

Пример: синхронный запрос не по HTTP

Несмотря на свое название, XMLHttpRequest можно использовать для запросов, не относящихся к HTTP. В этом примере показано, как использовать его для извлечения файла из локальной файловой системы.

var req = new XMLHttpRequest();
req.open('GET', 'file:///home/user/file.json', false); 
req.send(null);
if(req.status == 0)
  dump(req.responseText);

Ключевым моментом, который следует здесь отметить, является то, что статус результата сравнивается с 0 для успеха вместо 200. Это связано с тем, что схемы file и ftp не используют коды результатов HTTP

0 голосов
/ 12 января 2010

У jQuery, похоже, нет этой проблемы на chrome и ie8.

0 голосов
/ 01 декабря 2009

Поддерживаемые типы:

* "xml": Treat the response as an XML document that can be processed via jQuery. 
* "html": Treat the response as HTML (plain text); included script tags are evaluated. 
* "script": Evaluates the response as JavaScript and evaluates it. 
* "json": Evaluates the response as JSON and sends a JavaScript Object to the success callback. 

Возможно, использование должно использовать "html" вместо "text", поскольку jQuery, похоже, ничего не анализирует, если вы укажете html в качестве типа.

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