2011-01-13 43 views
10

Tôi đang tạo một dịch vụ web cần trả về dữ liệu ở định dạng JSONP. Tôi đang sử dụng JSON taglib cho JSP, và tôi nghĩ rằng tất cả những gì đã được thêm vào là dấu ngoặc đơn, nhưng tôi không thể tìm thấy một nguồn tài nguyên tốt mà xác minh điều này.Gửi dữ liệu JSONP và JSON?

Ví dụ, chức năng dịch vụ web bao giờ trở lại sử dụng chức năng này:

private static String getJSONPObject(String s) throws JSONException { 
    return "(" + new JSONObject(s) + ")"; 
} 

Đây có phải là đúng?

Cảm ơn!

Trả lời

22

JSONP chỉ đơn giản là một hack để cho phép các ứng dụng web truy xuất dữ liệu trên các tên miền. Có thể nói rằng nó vi phạm Same Origin Policy (SOP). Cách thức hoạt động của nó là sử dụng Javascript để chèn phần tử "tập lệnh" vào trang của bạn. Vì vậy, bạn cần một hàm gọi lại. Nếu bạn không có, Javascript của bạn sẽ không có cách nào để truy cập đối tượng JSON. Nhưng bằng cách sử dụng JSONP, mã Javascript của bạn có thể gọi hàm gọi lại.

Vì vậy, bạn phải chỉ định tên gọi lại. Vì vậy, chức năng của bạn có thể trông giống như thế này:

private static String getJSONPObject(String callback, String s) throws JSONException { 
    return callback + "(" + new JSONObject(s) + ")"; 
} 
+2

Bạn nên có quyền truy cập vào các đối tượng yêu cầu http hoặc ít nhất là một số cách tiếp cận gọi lại được gửi đi, thường ở dạng này: http://example.com?callback=name123 –

+0

Ya, và mở rộng theo điểm của Abdullah, mã Javascript của bạn sau đó sẽ gọi hàm "name123" để lấy JSON. –

+0

ah, cảm ơn, tôi hiểu cuộc gọi lại ngay bây giờ. tuy nhiên, tôi không chắc chắn về cách truy xuất nó trong dịch vụ web. tôi có thể yêu cầu nó như là một tham số trong chức năng của tôi, nhưng điều đó dường như không thân thiện với người dùng khi có thể phân tích nó trong liên kết như Abdullah được minh họa. cụ thể, điều này được sử dụng bên trong một lớp và dịch vụ web cho phép một người truy cập vào các phương thức này. đối tượng yêu cầu có thể được sử dụng bên trong lớp không? – Garrett

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