AJAX isteğinde içerik türü ve veri türü nedir?


179

POST isteğinde içerik türü ve veri türü nedir? Varsayalım:

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

    },
    error : function(error) {

    },

contentTypegönderdiğimiz ne var? Yukarıdaki örnekte gönderdiğimiz şey JSON ve aldığımız şey düz metin mi? Gerçekten anlamıyorum.

Yanıtlar:


304

contentTypegönderdiğiniz veri türüdür, bu yüzden application/json; charset=utf-8yaygın olanıdır, application/x-www-form-urlencoded; charset=UTF-8bu varsayılan değerdir.

dataTypesunucudan geri bekliyorsanız ne: json, html, textvb jQuery başarı işlevin parametresi doldurmak anlamaya bunu kullanır.

Şöyle bir şey gönderiyorsanız:

{"name":"John Doe"}

ve tekrar beklemek:

{"success":true}

O zaman sahip olmalısınız:

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

Aşağıdakileri bekliyorsanız:

<div>SUCCESS!!!</div>

O zaman yapmanız gerekenler:

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

Bir tane daha - göndermek istiyorsanız:

name=John&age=34

Sonra stringifyverileri yapmayın ve şunları yapın:

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

gerçekten teşekkür ederim :) bu "başarı" nedir: doğru. arka uçta başka bir json dosyası mı? bu başarı nasıl yapılır? gerçekten bilmek istediğim bu
user2759697

2
Bu sadece sıradan bir nesne - ancak sunucu bunu yapmaya karar veriyor. Bir web sunucusu, HTML, metin veya bu durumda "başarı" adı ve true değeri olan tek bir özelliğe sahip bir JSON nesnesi gibi hissettirdiği her şeyi gönderebilir. API'nizin çerçevesinin ne olduğunu tahmin edemiyorum, ancak ASP.NET MVC'deki C #'da bu kadar basit bir şey olurdu[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos

1
Type kelimesinde So capital T $.ajax({ dataType : "html", ... yerine kullanmanız gerektiğine dikkat edin $.ajax({ datatype : "html",... . JQuery API'sını
Vadim Levkovsky

1
@Jacques Onların yapmış olabilir varsayalım requestContentTypeve responseDataTypefakat bunu birkaç kez yaptık ve API'ya anladığınızda gerçekte, fazladan yazarak değerli yapmak için yeterli karıştı edilmeyecektir.
Joe Enos

1
@stom Soru ve cevabım POST'a özgüdü, ancak hatırlıyorum, bir GET'teki veri olarak sıradan bir basit nesne iletirseniz, bunu anahtar / değer çiftlerine sahip bir sorgu dizesine dönüştürür. Yuvalanmış değerlere sahip karmaşık bir nesneniz varsa ne olacağını bilmiyorum - ama merak ediyorsanız bunu denemek zor olmamalı. Bunu gerçek hayatta asla yapmazdım - çok nadiren AJAX'ı bir GET'te kullanırım.
Joe Enos

32

JQuery dokümanlarından - http://api.jquery.com/jQuery.ajax/

contentType Sunucuya veri gönderirken bu içerik türünü kullanın.

dataType Sunucudan beklediğiniz veri türü. Hiçbiri belirtilmezse, jQuery yanıtın MIME türüne göre çıkarım yapmaya çalışır

"text": Düz metin dizesi.

Böylece contentType'ın application/jsonve dataType'ın olmasını istiyorsunuz text:

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

    },
    error : function(error) {

    }
});

gerçekten teşekkürler ve uygulama / json bu uygulama nedir. bu bir yol mu?
user2759697

1
@ user2759697 Bu, JSON için tanımlanan MIME türünün sadece bir parçasıdır. Bu soruya bakın - stackoverflow.com/questions/477816/…
Richard Dalton

4
SO hakkında sevdiğim şey bu ... bariz olanı belirtmek için temsilci olsun ...> _ <
Christoph

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.