Відповіді:
contentTypeє заголовком HTTP, що надсилається на сервер із зазначенням конкретного формату. dataTypeВи кажете 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);
}
dataType = ""?
(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 спробує зробити висновок на основі типу вмісту відповіді.===============================
Зразок запиту:
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 повертають дані без обробки. Дані просто передаються обробнику успіху
відповідно до документів :
"json": Оцінює відповідь як JSON і повертає об’єкт JavaScript. У jQuery 1.4 дані JSON строго розбираються; будь-який неправильно сформований JSON відхиляється і видається помилка розбору. (Див. Json.org для отримання додаткової інформації щодо правильного форматування JSON.)"text": Простий текстовий рядок.Навантажувач jQuery Ajax працює не так добре, коли ви дзвоните два API одночасно. Щоб вирішити цю проблему, вам потрібно зателефонувати API один за одним, використовуючи isAsyncвластивість у налаштуваннях Ajax. Вам також потрібно переконатися, що в налаштуваннях не повинно бути помилок. В іншому випадку навантажувач не працюватиме. Наприклад, невизначений тип вмісту, тип даних для виклику POST / PUT / DELETE / GET.