2009-07-03 4 views
25

Có sự khác biệt nào trong hai cuộc gọi này không? Nếu bạn sử dụng getJSON, bạn vẫn phải khai báo format=json trong url ...

Và bạn có thể làm tương tự trong $.get() và lặp qua đối tượng JSON.

Hoặc tôi có phải ra khỏi đây không?

+0

Những gì bạn phải khai báo trong URL không liên quan gì đến jQuery. Cũng không phải là trường hợp cho tất cả các trang web - chắc chắn không phải cho một trong những của tôi ;-) – NickFitz

+0

Tôi đã chỉ nói rằng bạn phải khai báo trong url mà bạn đang tìm kiếm một kết quả JSON, ngay cả khi bạn đang sử dụng getJSON. Và bạn cũng sẽ khai báo nó trong url cho $ .get(). Chỉ cần tự hỏi những gì người ta làm, mà người kia không ... – peirix

+0

Bạn thực sự ** là ** ra khỏi theo dõi ở đây. trong khi sử dụng ** getJSON() ** phương pháp bạn ** KHÔNG ** phải rõ ràng vượt qua datatype nhưng trong ** get() ** Phương pháp bạn sẽ explixitly ** CÓ **. Xem nhận xét trên bởi yehuda. Nó cho biết toàn bộ câu chuyện hoặc người nào khác truy cập [http://api.jquery.com/jQuery.getJSON/](http://api.jquery.com/jQuery.getJSON/) – kushalvm

Trả lời

43

Hai đoạn sau là tương đương:

$.get("/some/url", {data: "value"}, function(json) { 
    // use json here 
}, "json") 

$.getJSON("/some/url", {data: "value"}, function(json) { 
    // use json here 
}); 

Nói rằng một yêu cầu là cho JSON nghĩa hai điều:

  • jQuery gửi một tiêu đề Accept: application/json
  • jQuery diễn giải phản hồi trong nước, chuyển đổi nó vào đối tượng JavaScript và chuyển nó vào hàm gọi lại (do đó bạn không phải gây rối với eval hoặc cơ chế chuyển đổi khác).

Một số khung bên máy chủ (như Rails) tự động phát hiện tiêu đề Accept và xử lý yêu cầu một cách thích hợp. Nếu bạn đang sử dụng một khung công tác khác hoặc tự tạo khung của riêng mình, bạn có thể kiểm tra tiêu đề Accept để phát hiện định dạng (thay vì kiểm tra các tham số).

+0

Tôi cũng nên chỉ ra rằng lý do giải pháp tiêu đề Chấp nhận được thêm vào là để phục vụ các khung công tác xử lý nó một cách duyên dáng, làm cho giao tiếp giữa jQuery và các khung công tác như vậy (ví dụ Rails) liền mạch. –

6

Tôi nghĩ tài liệu giải thích rõ ràng!

http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

tải từ xa trang sử dụng một yêu cầu HTTP GET.

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

tải JSON dữ liệu sử dụng một yêu cầu HTTP GET.

Hãy nhớ rằng, đây chỉ là trừu tượng của phương pháp .ajax

+0

Nhưng người ta vẫn có thể sử dụng $ .get để nhận dữ liệu JSON, phải không? Nếu trang bạn đang gọi trả về một đối tượng JSON? – peirix

+0

Chắc chắn, tôi giả sử, miễn là bạn chỉ định đối số 'dữ liệu' là json. Nếu trang sẽ trả về json, tại sao không chỉ sử dụng phương thức getJSON? Một lần nữa, đây chỉ là trừu tượng hóa để đơn giản hóa các cuộc gọi ajax, từ phương thức .ajax cơ sở. Họ ở đó để giúp mọi việc dễ dàng hơn cho bạn, không làm phức tạp! – ScottE

+4

Tôi đã sử dụng $ .get không có đối số dữ liệu và nó hoạt động tốt. Tài liệu API cho biết mặc định cho đối số dữ liệu là "đoán thông minh", và vì vậy rõ ràng jQuery đang đoán đúng trong trường hợp sử dụng của tôi ;-) – Elisabeth

2

Sự khác biệt giữa $ .getJSON và $ .get là trong các thông số:

  1. $ .getJSON chấp nhận đối tượng đơn giản như dữ liệu trong khi $ .get chấp nhận đối tượng đồng bằng hoặc chuỗi.
  2. $ .get có tham số dataType.

Vì vậy, sử dụng $ .get with dataType: JSON sẽ hoạt động giống như $ .getJSON.