O que é tipo de conteúdo e tipo de dados em uma solicitação AJAX?

179

O que é tipo de conteúdo e tipo de dados em uma solicitação POST? Suponha que eu tenho isso:

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

    },
    error : function(error) {

    },

É contentTypeo que enviamos? Então, o que enviamos no exemplo acima é JSON e o que recebemos é texto simples? Eu realmente não entendo.

user2759697
fonte

Respostas:

304

contentTypeé o tipo de dados que você está enviando, então application/json; charset=utf-8é comum, como é application/x-www-form-urlencoded; charset=UTF-8, o padrão.

dataTypeé o que você está esperando de volta do servidor: json, html, text, etc. jQuery vai usar isso para descobrir como preencher parâmetros da função sucesso.

Se você estiver postando algo como:

{"name":"John Doe"}

e esperando de volta:

{"success":true}

Então você deve ter:

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

Se você está esperando o seguinte:

<div>SUCCESS!!!</div>

Então você deve fazer:

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

Mais um - se você quiser postar:

name=John&age=34

Então não faça stringifyos dados e faça:

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
fonte
obrigado de fato :) o que é esse "sucesso": verdadeiro. é outro arquivo json no back-end? como esse sucesso é feito? que é o que eu realmente gostaria de saber
user2759697
2
Esse é apenas um objeto comum - ele foi criado, mas o servidor decide fazê-lo. Um servidor da Web pode enviar tudo o que parece - HTML, texto ou, nesse caso, um objeto JSON com uma única propriedade com o nome "success" e o valor true. Eu não posso adivinhar o quadro do seu API é, mas em C # no ASP.NET MVC seria algo tão simples como[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos
1
Preste atenção que você deve usar em $.ajax({ dataType : "html", ... vez de $.ajax({ datatype : "html",... So capital T na palavra Type é importante. Verifique a API do jQuery
Vadim Levkovsky
1
@Jacques Suponho que poderia ter feito requestContentTypee responseDataType, mas, na realidade, uma vez que você já fez isso algumas vezes, e você compreender a API, você não vai ser confundido o suficiente para fazer a digitação adicional vale a pena.
Joe Enos
1
@stom A pergunta e minha resposta foram específicas para o POST, mas, se bem me lembro, se você passar um objeto simples comum como dados em um GET, isso transformará isso em uma sequência de consulta com pares de valores-chave. Não sei o que aconteceria se você tivesse um objeto complexo com valores aninhados - mas não deve ser difícil tentar isso se estiver curioso. Porém, eu nunca faria isso na vida real - muito raramente eu uso o AJAX em um GET de qualquer maneira.
Joe Enos
32

Na documentação do jQuery - http://api.jquery.com/jQuery.ajax/

contentType Ao enviar dados para o servidor, use esse tipo de conteúdo.

dataType O tipo de dados que você espera do servidor. Se nenhum for especificado, o jQuery tentará deduzi-lo com base no tipo MIME da resposta

"texto": uma sequência de texto sem formatação.

Então você quer que contentType seja application/jsone dataType seja text:

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

    },
    error : function(error) {

    }
});
Richard Dalton
fonte
obrigado de fato e qual é esta aplicação em application / json. é um caminho?
User2759697
1
@ user2759697 Isso é apenas parte do tipo MIME definido para JSON. Veja esta pergunta - stackoverflow.com/questions/477816/…
Richard Dalton
4
É disso que eu gosto em SO ... obter representante por declarar o óbvio ...> _ <#
Christoph
1

Veja http://api.jquery.com/jQuery.ajax/ , há menção de tipo de dados e contentType lá.

Ambos são usados ​​na solicitação ao servidor para que o servidor saiba que tipo de dados receber / enviar.

Jono
fonte