Co to jest typ zawartości i typ danych w żądaniu AJAX?

179

Co to jest typ zawartości i typ danych w żądaniu POST? Załóżmy, że mam to:

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

    },
    error : function(error) {

    },

Czy contentTypeto, co wysyłamy? Zatem w powyższym przykładzie wysyłamy JSON, a otrzymujemy zwykły tekst? Naprawdę nie rozumiem.

user2759697
źródło

Odpowiedzi:

304

contentTypeto typ wysyłanych danych, więc application/json; charset=utf-8jest to typowy typ application/x-www-form-urlencoded; charset=UTF-8, który jest domyślny.

dataTypejest co czekasz z serwera: json, html, text, itd jQuery użyje tego, aby dowiedzieć się, jak wypełnić Parametr Funkcja powodzenie tych.

Jeśli publikujesz coś takiego:

{"name":"John Doe"}

i oczekując z powrotem:

{"success":true}

Wtedy powinieneś mieć:

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
    },
});

Jeśli spodziewasz się następujących rzeczy:

<div>SUCCESS!!!</div>

Następnie powinieneś zrobić:

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
    },
});

Jeszcze jedno - jeśli chcesz napisać:

name=John&age=34

Więc nie stringifydanych i zrób:

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
    },
});
Joe Enos
źródło
dziękuję naprawdę :) co to za „sukces”: prawda. czy to kolejny plik json na zapleczu? jak to się robi? to jest to, co naprawdę lubię wiedzieć
user2759697
2
To po prostu zwykły obiekt - jest wykonany, ale serwer zdecyduje się go zrobić. Serwer sieciowy może wysłać wszystko, co mu się podoba - HTML, tekst lub w tym przypadku obiekt JSON z pojedynczą właściwością o nazwie „sukces” i wartości true. Nie mogę zgadnąć, jaka jest struktura twojego API, ale w C # na ASP.NET MVC byłoby coś tak prostego jak[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos
1
Zwróć uwagę, że powinieneś używać $.ajax({ dataType : "html", ... zamiast $.ajax({ datatype : "html",... więc dużej litery T w słowie Typ jest ważny. Sprawdź interfejs API jQuery
Vadim Levkovsky
1
@Jacques Przypuszczam mogli zrobić requestContentTypei responseDataType, ale w rzeczywistości, kiedyś zrobiłeś go kilka razy, a ty zrozumieć API, nie będzie się mylić wystarczająco, aby dodatkowo wpisując opłaca.
Joe Enos
1
@stom Pytanie i moja odpowiedź były specyficzne dla POST, ale jeśli pamiętam, jeśli przekazujesz zwykły prosty obiekt jako dane w GET, zmieni to w ciąg zapytania z parami klucz-wartość. Nie jestem pewien, co by się stało, gdybyś miał złożony obiekt z zagnieżdżonymi wartościami - ale nie powinno być trudno tego spróbować, jeśli jesteś ciekawy. Jednak nigdy bym tego nie zrobił w prawdziwym życiu - i tak bardzo rzadko używam AJAX na GET.
Joe Enos
32

Z dokumentacji jQuery - http://api.jquery.com/jQuery.ajax/

contentType Podczas wysyłania danych na serwer należy używać tego typu zawartości.

dataType Typ danych, których oczekujesz z powrotem z serwera. Jeśli nic nie zostanie określone, jQuery spróbuje wywnioskować to na podstawie typu MIME odpowiedzi

„tekst”: zwykły ciąg tekstowy.

Więc chcesz, aby contentType było, application/jsona dataType było text:

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

    },
    error : function(error) {

    }
});
Richard Dalton
źródło
dzięki rzeczywiście i co to za aplikacja w application / json. czy to ścieżka?
user2759697
1
@ user2759697 To tylko część zdefiniowanego typu MIME dla JSON. Zobacz to pytanie - stackoverflow.com/questions/477816/…
Richard Dalton
4
To właśnie lubię w SO ... zdobądź przedstawiciela za stwierdzenie oczywistego ...> _ <
Christoph