2012-06-16 9 views
25

Đã dành một tiếng đồng hồ rắn cố gắng sắp xếp ra lý do tại sao trên trái đất này (coffeescript)Điểm của jQuery ajax là gì? Nó có thực sự làm gì không?

$.ajax 
    accepts: "application/json; charset=utf-8" 

đã hoàn toàn không có gì để thay đổi nhận tiêu đề, trong khi điều này

$.ajax 
    dataType: "json" 

đúng thiết lập chấp nhận tiêu đề để application/json; charset=utf-8

Hoàn toàn nhầm lẫn, tôi có thiếu điều gì đó hoặc là người nhận chấp nhận một trò đùa của April Fool quanh năm không?

Trả lời

24

Như mọi khi các documentation là bạn của bạn:

chấp nhận

Mặc định: phụ thuộc vào DataType

Kiểu nội dung gửi trong tiêu đề yêu cầu mà nói với máy chủ loại phản hồi nó sẽ chấp nhận đổi lại. Nếu cài đặt chấp nhận cần sửa đổi, thì đó là được khuyến nghị thực hiện một lần trong phương thức $ .ajaxSetup().

datatype

Mặc định: Guess thông minh (xml, json, kịch bản, hoặc html)

Các loại dữ liệu mà bạn đang mong đợi trở lại từ máy chủ. Nếu không có được chỉ định, jQuery sẽ cố gắng suy ra nó dựa trên kiểu MIME của phản hồi (một kiểu XML MIME sẽ mang lại XML, trong 1,4 JSON sẽ mang lại một đối tượng JavaScript, trong kịch bản 1,4 sẽ thực thi tập lệnh và bất cứ điều gì khác sẽ được trả về như một chuỗi). Các loại có sẵn (và kết quả được chuyển làm đối số đầu tiên cho cuộc gọi lại thành công của bạn) là:

"xml": Trả về tài liệu XML có thể được xử lý qua jQuery.

"html": Trả về HTML dưới dạng văn bản thuần túy; bao gồm các thẻ tập lệnh được đánh giá khi được chèn vào DOM.

"tập lệnh": Đánh giá phản hồi là JavaScript và trả về dưới dạng văn bản thuần túy. Tắt bộ nhớ đệm bằng cách thêm thông số chuỗi truy vấn, _=[TIMESTAMP], vào URL trừ khi tùy chọn bộ nhớ cache được đặt thành true. Lưu ý: Thao tác này sẽ chuyển POST thành GET cho các yêu cầu tên miền từ .

"json": Đánh giá phản hồi dưới dạng JSON và trả về đối tượng JavaScript. Trong jQuery 1.4, dữ liệu JSON được phân tích cú pháp theo kiểu một cách nghiêm ngặt; bất kỳ JSON không đúng định dạng nào đều bị từ chối và lỗi phân tích cú pháp là bị ném. (Xem json.org để biết thêm thông tin về định dạng JSON thích hợp.)

"jsonp": Tải trong khối JSON bằng JSONP. Thêm ?callback=? vào cuối URL của bạn để chỉ định cuộc gọi lại. Tắt tính năng bộ nhớ đệm bằng cách thêm thông số chuỗi truy vấn,
_=[TIMESTAMP], vào URL trừ khi tùy chọn bộ nhớ cache được đặt thành true.

"văn bản": Một văn bản thuần túy chuỗi. nhiều giá trị được phân tách bằng dấu cách: Trong jQuery 1.5, jQuery có thể chuyển đổi một loại dữ liệu từ loại dữ liệu nhận được trong tiêu đề Loại nội dung thành những gì bạn yêu cầu. Ví dụ: nếu bạn muốn một phản hồi văn bản được coi là XML, hãy sử dụng "văn bản xml" cho loại dữ liệu. Bạn cũng có thể thực hiện yêu cầu JSONP , nhận nó dưới dạng văn bản và được jQuery giải thích là XML: "văn bản jsonp xml". Tương tự, một chuỗi viết tắt như "jsonp xml" trước tiên sẽ cố chuyển đổi từ jsonp thành xml và, không , chuyển đổi từ jsonp thành văn bản và sau đó từ văn bản thành xml.

Bây giờ, hãy quay lại vấn đề của bạn. Tôi không quen thuộc với cofeescript nhưng trái với dataType mà là một chuỗi, tham số accepts là một bản đồ và nên được sử dụng như thế này:

$.ajax({ 
    url: ... 
    dataType: 'json', 
    accepts: { 
     xml: 'text/xml', 
     text: 'text/plain' 
    } 
}); 
+12

+1, đồng ý tái: tài liệu hướng dẫn; tuy nhiên, nó hoàn toàn không trực quan để cung cấp một thuộc tính được đặt tên theo tiêu đề bạn đang cố gắng thay đổi, đó là thực tế, một công dân hạng 2 liên quan đến trình điều khiển thực của bus, dataType. Chỉ khó hiểu khi đặt cả dataType và accept dường như thực sự dẫn đến tiêu đề phản hồi mặc định. Dù sao, vui mừng khi đã tìm thấy rằng datatype một mình hiện công việc ... – virtualeyes

+18

Tôi phải concur với virtualeyes, chứ không phải tên không trực quan. Và tài liệu này giống như một người bạn khó hiểu một cách nhanh chóng:) ... Ngoài ra, liên kết khai báo kiểu 'Bản đồ' trỏ tới http://api.jquery.com/Types/#Map, có vẻ như mô tả dữ liệu tham số. Không có mã ví dụ. Và "Mặc định: phụ thuộc vào DataType" là một cách nói, không phải là nó: nó _always_ phụ thuộc vào 'dataType', cung cấp thứ tự các loại, đúng không? ... tài liệu lý tưởng nên giống như một người lạ mà người ta hiểu ngay lập tức. Đó là tất nhiên khó đạt được, tôi biết. –

+0

Nếu không chỉ định 'dataType' và' accept', thì tiêu đề HTTP Accepts được gửi là gì? Không ai? –