¿Qué es el tipo de contenido y el tipo de datos en una solicitud AJAX?

179

¿Qué es el tipo de contenido y el tipo de datos en una solicitud POST? Supongamos que tengo esto:

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

    },
    error : function(error) {

    },

Es contentTypelo que enviamos? Entonces, ¿qué enviamos en el ejemplo anterior es JSON y lo que recibimos es texto sin formato? Realmente no entiendo.

usuario2759697
fuente

Respuestas:

304

contentTypees el tipo de datos que está enviando, por lo que application/json; charset=utf-8es uno común, como es application/x-www-form-urlencoded; charset=UTF-8, que es el predeterminado.

dataTypees lo que está esperando de vuelta desde el servidor: json, html, text, etc jQuery usar esto para averiguar cómo rellenar los parámetros de la función de éxito.

Si publicas algo como:

{"name":"John Doe"}

y esperando volver:

{"success":true}

Entonces deberías tener:

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

Si espera lo siguiente:

<div>SUCCESS!!!</div>

Entonces deberías hacer:

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

Uno más, si quieres publicar:

name=John&age=34

Entonces no stringifylos datos, y hacer:

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
fuente
gracias de hecho :) cuál es este "éxito": cierto. ¿es otro archivo json en el backend? ¿Cómo se hace este éxito? eso es lo que realmente me gusta saber
user2759697
2
Eso es solo un objeto ordinario: está hecho sin embargo, el servidor decide hacerlo. Un servidor web puede enviar cualquier cosa que desee: HTML, texto o, en este caso, un objeto JSON con una sola propiedad con el nombre "éxito" y el valor verdadero. No puedo adivinar cuál es el marco de su API, pero en C # en ASP.NET MVC sería algo tan simple como[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos el
1
Preste atención a lo que debe usar en $.ajax({ dataType : "html", ... lugar de $.ajax({ datatype : "html",... So T mayúscula en el tipo de palabra es importante. Compruebe jQuery API
Vadim Levkovsky
1
@Jacques supongo que podría haber hecho requestContentTypey responseDataType, pero, en realidad, una vez que lo ha hecho un par de veces, y que entiende la API, que no serán confundidos suficiente para hacer la tipificación adicional que vale la pena.
Joe Enos
1
@stom La pregunta y mi respuesta fueron específicas de POST, pero si recuerdo, si pasa un objeto simple ordinario como los datos en un GET, lo convertirá en una cadena de consulta con pares clave-valor. No estoy seguro de lo que sucedería si tuviera un objeto complejo con valores anidados, pero no debería ser difícil intentarlo si tiene curiosidad. Sin embargo, nunca haría eso en la vida real; de todos modos, rara vez uso AJAX en un GET.
Joe Enos
32

De la documentación de jQuery: http://api.jquery.com/jQuery.ajax/

contentType Cuando envíe datos al servidor, use este tipo de contenido.

dataType El tipo de datos que espera del servidor. Si no se especifica ninguno, jQuery intentará inferirlo en función del tipo MIME de la respuesta

"texto": una cadena de texto sin formato.

Entonces desea que contentType sea application/jsony dataType sea text:

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

    },
    error : function(error) {

    }
});
Richard Dalton
fuente
gracias de hecho y cuál es esta aplicación en application / json. ¿Es un camino?
user2759697
1
@ user2759697 Eso es solo parte del tipo MIME definido para JSON. Vea esta pregunta - stackoverflow.com/questions/477816/…
Richard Dalton
44
Eso es lo que me gusta de SO ... obtener representante por decir lo obvio ...> _ <
Christoph
1

Ver http://api.jquery.com/jQuery.ajax/ , hay mención de tipo de datos y tipo de contenido allí.

Ambos se utilizan en la solicitud al servidor para que el servidor sepa qué tipo de datos recibir / enviar.

Jono
fuente