Подтвердить что ты не робот

В чем смысл jQuery ajax принимает атрибут? Действительно ли это что-то делает?

Провел твердый час, пытаясь разобраться, почему на земле это (coffeescript)

$.ajax
  accepts: "application/json; charset=utf-8"

ничего не изменилось, чтобы изменить заголовок accepts, в то время как

$.ajax
  dataType: "json"

правильно устанавливает заголовок accepts на application/json; charset=utf-8

Полностью смущенный, я что-то упускаю или согласен с тем, что он приносит круглый год шутка в апреле-дураке?

4b9b3361

Ответ 1

Как всегда документация является вашим другом:

принимает

Значение по умолчанию: зависит от типа DataType

Тип контента, отправленный в заголовок запроса, который сообщает серверу, какой ответ он будет принимаем взамен. Если параметр accepts требует изменения, это рекомендуется сделать это один раз в методе $.ajaxSetup().

DATATYPE

По умолчанию: Intelligent Guess (xml, json, script или html)

Тип данных, которые вы ожидаете от сервера. Если ни один, jQuery попытается вывести его на основе типа MIME ответ (тип XML MIME даст XML, в 1.4 JSON будет объект JavaScript, в 1.4 script выполнит script, и все остальное будет возвращено в виде строки). Доступные типы (и результат, полученный в качестве первого аргумента для вашего обратного вызова успеха):

" xml": возвращает XML-документ, который может обрабатываться через jQuery.

" html": возвращает HTML как обычный текст; включены теги scriptпри вставке в DOM.

" script": оценивает ответ как JavaScript и возвращает его как обычный текст. Отключает кеширование путем добавления параметр строки запроса, _=[TIMESTAMP], к URL-адресу, если только кеш option установлено значение true. Примечание. Это превратит POST в GET для запросы удаленного домена.

" json": оценивает ответ как JSON и возвращает объект JavaScript. В jQuery 1.4 данные JSON анализируются в строгий порядок; любой отклоненный JSON отклоняется, и ошибка синтаксического анализа выброшены. (См. Json.org для получения дополнительной информации о правильном форматировании JSON.)

" jsonp": загружает в блок JSON с помощью JSONP. Добавляет дополнительный ?callback=? в конец вашего URL, чтобы указать обратный вызов. Запрещает кэширование путем добавления параметра строки запроса,
_=[TIMESTAMP], к URL, если для параметра кеша установлено значение true.

" текст": простой текст строка. несколько значений, разделенных пробелами: с jQuery 1.5 jQuery может преобразовать тип данных из полученного в заголовке Content-Type значения что вам нужно. Например, если вы хотите, чтобы текстовый ответ был обработанный как XML, используйте " текст xml" для dataType. Вы также можете сделать JSONP, получил ли он текст и интерпретировал jQuery как XML: "jsonp text xml". Аналогично, строковая строка, такая как "jsonp xml" сначала попытается преобразовать из jsonp в xml, и, что, конвертировать из jsonp в текст, а затем из текста в xml.

Теперь вернемся к вашей проблеме. Я не знаком с cofeescript, но в отличие от dataType, который является строкой, параметр accepts является картой и должен использоваться следующим образом:

$.ajax({
    url: ...
    dataType: 'json',
    accepts: {
        xml: 'text/xml',
        text: 'text/plain'
    }
});