$.ajax - dataType

В чем разница между

contentType: "application/json; charset=utf-8",
dataType: "json",

против

contentType: "application/json",
dataType: "text",

4 ответа

Решение
  • contentType заголовок, отправляемый на сервер, с указанием определенного формата.
    • Пример: я отправляю json или XML
  • dataType Вы говорите JQuery, какой ответ ожидать.
    • Ожидается, что JSON, или XML, или HTML, и т. Д.… Будут использоваться по умолчанию для jQuery, чтобы попытаться выяснить это.

$.ajax() документация также содержит их полное описание.

В вашем конкретном случае первый просит, чтобы ответ был в utf-8Второму пофиг. Кроме того, первый обрабатывает ответ как объект javascript, а второй обрабатывает его как строку.

Итак, первое будет:

success: function(data) {
  //get data, e.g. data.title;
}

Второй:

success: function(data) {
  alert("Here's lots of data, just a string: " + data);
}

(пс: ответ Ника Крэйвера неверен)

contentType указывает формат данных, отправляемых на сервер как часть запроса (его можно также отправить как часть ответа, подробнее об этом позже).

dataType указывает ожидаемый формат данных, которые будут получены клиентом (браузером).

Оба не взаимозаменяемы.

  • contentType заголовок, отправляемый на сервер, определяющий формат данных (т. е. содержимого тела сообщения), находящихся на сервере. Это используется с запросами POST и PUT. Обычно, когда вы отправляете запрос POST, тело сообщения содержит переданные параметры, такие как:

==============================

Запрос образца:

POST /search HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
<<other header>>

name=sam&age=35

==============================

Последняя строка выше "name=sam&age=35" - это тело сообщения, а contentType определяет его как application/x-www-form-urlencoded, поскольку мы передаем параметры формы в теле сообщения. Однако мы не ограничиваемся просто отправкой параметров, мы можем отправлять json, xml и т. Д. Вот так (отправка различных типов данных особенно полезна для веб-сервисов RESTful):

==============================

Запрос образца:

POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>

<order>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

Итак, ContentType на этот раз: application/xml, потому что это то, что мы отправляем. В приведенных выше примерах показан пример запроса, аналогично, ответ, отправляемый с сервера, также может иметь заголовок Content-Type, определяющий, что сервер отправляет следующим образом:

==============================

образец ответа:

HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>

<order id="233">
   <link rel="self" href="http://example.com/orders/133"/>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

  • dataType указывает формат ответа, чтобы ожидать. Это связано с заголовком Accept. JQuery попытается вывести его на основе Content-Type ответа.

==============================

Запрос образца:

GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>

==============================

Выше запрос ожидает XML от сервера.

Что касается вашего вопроса,

contentType: "application/json; charset=utf-8",
dataType: "json",

Здесь вы отправляете данные json, используя набор символов UTF8, и ожидаете возвращения данных json с сервера. Согласно документам JQuery для dataType,

Тип json анализирует извлеченный файл данных как объект JavaScript и возвращает созданный объект как данные результата.

Таким образом, вы получаете в качестве обработчика успеха правильный объект javascript(JQuery преобразует объект json для вас)

в то время как

contentType: "application/json",
dataType: "text",

Здесь вы отправляете данные json, так как вы не упомянули кодировку, согласно документам JQuery,

Если кодировка не указана, данные будут передаваться на сервер, используя кодировку сервера по умолчанию; Вы должны декодировать это соответствующим образом на стороне сервера.

и так как dataType указан в виде текста, то, что вы получите в обработчике успеха, это простой текст, согласно документам для dataType,

Типы text и xml возвращают данные без обработки. Данные просто передаются в обработчик успеха

Согласно документам:

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

Загрузчик jQuery Ajax не работает, когда вы вызываете два API одновременно. Чтобы решить эту проблему, вы должны вызывать API один за другим, используя isAsync собственность в обстановке Ajax. Вы также должны убедиться, что в настройках не должно быть ошибок. В противном случае загрузчик не будет работать. Например, неопределенный тип содержимого, тип данных для вызова POST/PUT/DELETE/GET.

Другие вопросы по тегам