Що таке тип вмісту та тип даних у запиті AJAX?


179

Що таке тип вмісту та тип даних у запиті POST? Припустимо, у мене це:

$.ajax({
    type : "POST",
    url : /v1/user,
    datatype : "application/json",
    contentType: "text/plain",
    success : function() {

    },
    error : function(error) {

    },

Це contentTypeте, що ми надсилаємо? Отже, що ми надсилаємо у наведеному вище прикладі - JSON, і що ми отримуємо, це звичайний текст? Я не дуже розумію.

Відповіді:


304

contentType- це тип даних, який ви надсилаєте, так application/json; charset=utf-8це загальний, як є application/x-www-form-urlencoded; charset=UTF-8, який є типовим.

dataTypeє те , що ви очікуєте від сервера: json, html, textі т.д. JQuery буде використовувати це , щоб з'ясувати , як заповнити параметр функція успіху в.

Якщо ви публікуєте щось на зразок:

{"name":"John Doe"}

і очікуючи назад:

{"success":true}

Тоді ви повинні мати:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        alert(result.success); // result is an object which is created from the returned JSON
    },
});

Якщо ви очікуєте наступного:

<div>SUCCESS!!!</div>

Тоді вам слід зробити:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "html",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});

Ще один - якщо ви хочете опублікувати:

name=John&age=34

Тоді не робіть stringifyданих, а виконайте:

var data = {"name":"John", "age": 34}
$.ajax({
    dataType : "html",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
    data : data,
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});

дякую справді :) що це за "успіх": правда. це ще один файл json в бекенді? як цей успіх? це те, що мені дуже хочеться знати
user2759697

2
Це просто звичайний об'єкт - він зроблений, однак сервер вирішує його зробити. Веб-сервер може надсилати все, що вам заманеться - HTML, текст або в цьому випадку об’єкт JSON з єдиною властивістю з назвою "успіх" і значенням true. Я не можу здогадатися, що таке ваш API, але в C # на ASP.NET MVC це було б настільки просто, як[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Джо Енос

1
Зверніть увагу, що ви повинні використовувати $.ajax({ dataType : "html", ... замість $.ajax({ datatype : "html",... So великим капіталом T у слові Type є важливим. Перевірте API jQuery
Вадим Левковський,

1
@Jacques Я припускаю , що вони могли б зробити requestContentTypeі responseDataType, але насправді, як тільки ви зробили це кілька разів, і ви розумієте API, ви не будете плутати досить , щоб зробити додатковий набір тексту варто.
Джо Енос

1
@stom Питання та моя відповідь були специфічними для POST, але якщо я пам'ятаю, якщо ви передаєте звичайний простий об'єкт як дані в GET, це перетворить його в рядок запиту з парами ключ-значення. Не впевнений, що буде, якби у вас був складний об'єкт із вкладеними значеннями - але це не повинно бути складно, якщо ви цікавитеся. Я б ніколи цього не робив у реальному житті - дуже рідко я коли-небудь використовую AJAX на GET.
Джо Енос

32

З документації jQuery - http://api.jquery.com/jQuery.ajax/

contentType Під час надсилання даних на сервер використовуйте цей тип вмісту.

dataType Тип даних, які ви очікуєте від сервера. Якщо жоден не вказаний, jQuery спробує зробити висновок на основі типу відповіді MIME

"text": простий текстовий рядок.

Отже, ви хочете, щоб application/jsoncontentType був, а dataType був text:

$.ajax({
    type : "POST",
    url : /v1/user,
    dataType : "text",
    contentType: "application/json",
    data : dataAttribute,
    success : function() {

    },
    error : function(error) {

    }
});

дійсно дякую і що це за додаток у application / json. це шлях?
user2759697

1
@ user2759697 Це лише частина визначеного типу MIME для JSON. Дивіться це запитання - stackoverflow.com/questions/477816/…
Річард Далтон

4
Ось що мені подобається в ТАК ... отримати реп. Для викладу очевидних ...> _ <
Крістоф

1

Дивіться сторінку http://api.jquery.com/jQuery.ajax/ , там згадується тип даних і contentType.

Вони обидва використовуються в запиті до сервера, щоб сервер знав, які дані приймати / надсилати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.