Kiểu nội dung và kiểu dữ liệu trong yêu cầu AJAX là gì?


178

Kiểu nội dung và kiểu dữ liệu trong yêu cầu POST là gì? Giả sử tôi có cái này:

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

    },
    error : function(error) {

    },

contentTypenhững gì chúng tôi gửi? Vì vậy, những gì chúng tôi gửi trong ví dụ trên là JSON và những gì chúng tôi nhận được là văn bản thuần túy? Tôi thực sự không hiểu.

Câu trả lời:


303

contentTypelà loại dữ liệu bạn đang gửi, vì vậy, đây là loại dữ liệu application/json; charset=utf-8phổ biến application/x-www-form-urlencoded; charset=UTF-8.

dataTypelà những gì bạn đang mong trở lại từ máy chủ: json, html, textvv jQuery sẽ sử dụng để tìm ra cách để cư tham số chức năng thành công của.

Nếu bạn đang đăng một cái gì đó như:

{"name":"John Doe"}

và mong đợi trở lại:

{"success":true}

Sau đó, bạn nên có:

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

Nếu bạn đang mong đợi những điều sau đây:

<div>SUCCESS!!!</div>

Sau đó, bạn nên làm:

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

Thêm một - nếu bạn muốn đăng:

name=John&age=34

Sau đó, không có stringifydữ liệu và làm:

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

cảm ơn bạn thực sự :) "thành công" này là gì: đúng. nó là một tập tin json khác trong phụ trợ? thành công này được thực hiện như thế nào? đó là những gì tôi thực sự muốn biết
user2759697

2
Đó chỉ là một vật thể bình thường - nó được tạo ra tuy nhiên máy chủ quyết định tạo ra nó. Một máy chủ web có thể gửi bất cứ thứ gì nó cảm thấy - HTML, văn bản hoặc trong trường hợp này, một đối tượng JSON có một thuộc tính duy nhất có tên "thành công" và giá trị là đúng. Tôi không thể đoán khung công tác API của bạn là gì, nhưng trong C # trên ASP.NET MVC, nó sẽ đơn giản như[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos

1
Hãy chú ý rằng bạn nên sử dụng $.ajax({ dataType : "html", ... thay vì $.ajax({ datatype : "html",... chữ hoa T trong từ Loại là quan trọng. Kiểm tra API jQuery
Vadim Levkovsky

1
@Jacques Tôi cho rằng họ có thể đã thực hiện requestContentTyperesponseDataType, nhưng thực tế, một khi bạn đã thực hiện nó một vài lần và bạn hiểu API, bạn sẽ không bị nhầm lẫn đủ để làm cho việc gõ thêm đáng giá.
Joe Enos

1
@stom Câu hỏi và câu trả lời của tôi là dành riêng cho POST, nhưng nếu tôi nhớ lại, nếu bạn chuyển một đối tượng đơn giản bình thường làm dữ liệu trên GET, nó sẽ biến nó thành một chuỗi truy vấn với các cặp khóa-giá trị. Không chắc chắn điều gì sẽ xảy ra nếu bạn có một đối tượng phức tạp với các giá trị lồng nhau - nhưng sẽ không khó để thử điều đó nếu bạn tò mò. Mặc dù vậy, tôi sẽ không bao giờ làm điều đó trong cuộc sống thực - rất hiếm khi tôi sử dụng AJAX trên GET.
Joe Enos

32

Từ tài liệu jQuery - http://api.jquery.com/jQuery.ajax/

contentType Khi gửi dữ liệu đến máy chủ, hãy sử dụng loại nội dung này.

dataType Loại dữ liệu mà bạn mong đợi từ máy chủ. Nếu không được chỉ định, jQuery sẽ cố gắng suy luận dựa trên loại phản hồi MIME

"văn bản": Một chuỗi văn bản đơn giản.

Vì vậy, bạn muốn contentType trở thành application/jsonvà dataType là text:

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

    },
    error : function(error) {

    }
});

thực sự cảm ơn và ứng dụng này trong ứng dụng / json là gì nó là một con đường?
dùng2759697

1
@ user2759697 Đó chỉ là một phần của loại MIME được xác định cho JSON. Xem câu hỏi này - stackoverflow.com/questions/477816/ Mạnh
Richard Dalton

4
Đó là những gì tôi thích về SO ... nhận đại diện vì đã nêu rõ ...> _ <
Christoph

1

Xem http://api.jquery.com/jQuery.ajax/ , có đề cập đến kiểu dữ liệu và contentType ở đó.

Cả hai đều được sử dụng trong yêu cầu đến máy chủ để máy chủ biết loại dữ liệu nào sẽ nhận / gửi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.