Что такое тип содержимого и тип данных в запросе AJAX?

179

Что такое тип содержимого и тип данных в запросе POST? Предположим, у меня есть это:

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

    },
    error : function(error) {

    },

Это contentTypeто, что мы отправляем? Итак, что мы отправляем в приведенном выше примере - это JSON, а что мы получаем - простой текст? Я не очень понимаю.

user2759697
источник

Ответы:

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 с одним свойством с именем «success» и значением 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",... Так что заглавная T в слове Type важна. Проверьте jQuery API
Вадим Левковский
1
@Jacques Я предполагаю , что они могли бы сделать requestContentTypeи responseDataType, но на самом деле, как только вы сделали это несколько раз, и вы понимаете API, вы не будете путать достаточно , чтобы сделать дополнительный набор текста стоит.
Джо Энос
1
@stom Вопрос и мой ответ были специфичны для POST, но если я вспомню, если вы передадите обычный простой объект в качестве данных в GET, он превратит это в строку запроса с парами ключ-значение. Не уверен, что произойдет, если у вас будет сложный объект с вложенными значениями - но это не должно быть сложно, если вам интересно. Я бы никогда этого не сделал в реальной жизни - очень редко я когда-либо использую AJAX на GET.
Джо Энос
32

Из документации по jQuery - http://api.jquery.com/jQuery.ajax/

Тип содержимого При отправке данных на сервер используйте этот тип контента.

тип данных Тип данных, которые вы ожидаете от сервера. Если ничего не указано, jQuery попытается вывести его в зависимости от типа ответа MIME.

«текст»: текстовая строка.

Итак, вы хотите, чтобы contentType был, application/jsonа dataType был text:

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

    },
    error : function(error) {

    }
});
Ричард Далтон
источник
действительно спасибо и что это за приложение в приложении / JSON. это путь?
user2759697
1
@ user2759697 Это только часть определенного типа MIME для JSON. См. Этот вопрос - stackoverflow.com/questions/477816/…
Ричард Далтон
4
Это то, что мне нравится в SO ... получить представителя за очевидное ...> _ <
Кристоф
1

См. Http://api.jquery.com/jQuery.ajax/ , там есть упоминание о типе данных и типе контента.

Они оба используются в запросе к серверу, поэтому сервер знает, какие данные получать / отправлять.

Jono
источник