2012-09-10 42 views
39

Khi tôi kiểm tra đoạn mã sau trong Chrome điều khiển nó chỉ cho tôi một yêu cầu tiêu đề Accept:undefinedđèo chấp nhận tham số tiêu đề để jquery ajax

jQuery.ajax({ 
     url: _this.attr('href'), 
     accepts: "application/json; charset=utf-8", 

    }); 
}); 

Làm thế nào để thiết lập chấp nhận kiểu như json. Tôi không muốn thiết lập một tiêu đề tùy chỉnh hoặc sử dụng beforeSend

Trả lời

43

Hãy thử điều này,

$.ajax({  
    headers: {   
    Accept: "text/plain; charset=utf-8",   
    "Content-Type": "text/plain; charset=utf-8" 
    }  
    data: "data",  
    success : function(response) { 
    // ... 
    } 
}); 

Xem bài này để tham khảo:

Cannot properly set the Accept HTTP header with jQuery

+0

chcek tham số đầu tiên http://api.jquery.com/jQuery.ajax/. Tôi biết tôi có thể vượt qua tiêu đề nhưng tại sao nó không hoạt động với việc chấp nhận – aWebDeveloper

+0

+1 Tuyệt vời, khắc phục sự cố khác của tôi http://stackoverflow.com/questions/18586403/sending-html-data-through-ajax-using-spring- mvc. – ATOzTOA

26

Có hai cách thay thế để thiết lập chấp nhận tiêu đề , như sau:

1) setRequestHeader('Accept','application/json; charset=utf-8'); 

2) $.ajax({ 
    dataType: ($.browser.msie) ? "text" : "json", 
    accepts: { 
     text: "application/json" 
    } 
}); 
+3

Giá trị 'văn bản' cho IE đã giết tôi. – Peter

4

Hãy thử cách này:

$.ajax({ 
     beforeSend: function (xhr){ 
     xhr.setRequestHeader("Content-Type","application/json"); 
     xhr.setRequestHeader("Accept","text/json"); 
    }, 
    type: "POST", 
    //........ 
}); 
+1

Đây là giải pháp duy nhất mà tôi có thể làm việc, và tôi sử dụng jQuery 2.0+ – pusle

4

Bạn đã xác định được chấp nhận tham số là một trong những bạn muốn và KEYUR là ngay trong hiển thị cho bạn một cách chính xác để thiết lập nó, nhưng nếu bạn thiết lập DataType để "json", sau đó nó sẽ tự động thiết lập các giá trị mặc định chấp nhận giá trị bạn muốn theo the jQuery reference. Vì vậy, tất cả các bạn cần là:

jQuery.ajax({ 
    url: _this.attr('href'), 
    dataType: "json" 
}); 
2

tôi sử dụng jQuery.getJSON(url [, data ] [, success(data, textStatus, jqXHR) ]) ví dụ:

var url="my.php"; 
$.getJSON(url, myObj) 
.done(function(json) { ... }) /* got JSON from server */ 
.fail(function(jqxhr, textStatus, error) { 
    var err = textStatus + ", " + error; 
    console.log("Failed to obtain JSON data from server: " + err); 
    }); /* failed to get JSON */ 

getJSON là viết tắt cho:

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success 
}); 
3

Mặc dù một số trong số họ đều đúng, tôi đã tìm thấy khá bối rối các câu trả lời trước đó. Đồng thời, OP đã yêu cầu một giải pháp mà không cần đặt tiêu đề tùy chỉnh hoặc sử dụng beforeSend, vì vậy tôi đang tìm kiếm giải thích rõ ràng hơn. Tôi hy vọng kết luận của tôi cung cấp một số ánh sáng cho người khác.

jQuery.ajax({ 
    .... 
    accepts: "application/json; charset=utf-8", 
    .... 
}); 

không hoạt động vì accepts phải là một PlainObject (không phải là một String) theo doc jQuery (http://api.jquery.com/jquery.ajax/). Cụ thể, jQuery mong đợi không hoặc nhiều cặp khóa-giá trị liên quan đến mỗi dataType với loại MIME được chấp nhận cho chúng. Vì vậy, những gì tôi đã sử dụng cuối cùng là:

jQuery.ajax({ 
    .... 
    dataType: 'json', 
    accepts: { 
     json: 'application/json' 
    }, 
    .... 
}); 
+0

Điều này không làm việc cho tôi (jQuery 1.9.1). Tiêu đề Chấp nhận được đặt thành '*. *' (Ít nhất trong Chrome và Firefox). Sử dụng tùy chọn "tiêu đề" của karthick sẽ làm việc tho. – chichilatte

+1

Vâng, khá, đó là một 'PlainObject', nhưng không có giải thích về những gì các phím nên được ... – nicodemus13

13

Trong các phiên bản gần đây của jQuery, đặt "dataType" thành giá trị thích hợp cũng đặt tiêu đề chấp nhận. Ví dụ: dataType: "json" đặt tiêu đề chấp nhận thành Accept: application/json, text/javascript, */*; q=0.01.

6

Các câu trả lời khác không trả lời câu hỏi thực tế, mà là cung cấp cách giải quyết vì nó mất 10 giây để tìm ra cú pháp chính xác cho tham số accepts.

Tham số accepts lấy một đối tượng ánh xạ dataType tới tiêu đề Accept. Trong trường hợp của bạn, bạn thậm chí không cần phải vượt qua đối tượng accepts, vì việc đặt loại dữ liệu thành json là đủ.Tuy nhiên nếu bạn muốn cấu hình một phong tục Accept tiêu đề này là những gì bạn cần làm:

accepts: {"*": "my custom mime type" },

Làm sao tôi biết? Mở mã nguồn của jquery và tìm kiếm "accept". Phát hiện đầu tiên cho bạn biết tất cả các bạn cần biết:

accepts: { 
     "*": allTypes, 
     text: "text/plain", 
     html: "text/html", 
     xml: "application/xml, text/xml", 
     json: "application/json, text/javascript" 
    }, 

Như bạn thấy các ánh xạ là mặc định để text, html, xmljson kiểu dữ liệu.

Các vấn đề liên quan