$.ajax - dataType

какая разница между

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

против.

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

Ответ 1

  • 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 lots of data, just a string: " + data);
}

Ответ 2

(ps: ответ Ник Крейвер неверен)

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,

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

Ответ 3

согласно docs:

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

Ответ 4

Jquery ajax loader не работает, когда вы вызываете два API одновременно. для решения этой проблемы. вы должны вызывать API один за другим, используя свойство isAsync в настройке ajax. вам также необходимо убедиться, что не должно быть никаких ошибок при настройке, иначе загрузчик не будет работать. например undefined тип содержимого, тип данных для вызова POST/PUT/DELETE/GET.