против.
Ответ 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 возвращает данные без обработки. Данные просто передается обработчику успеха