JSONP hay là JSON với nhãn (padding) là một dạng bổ sung dựa trên nền định dạng dữ liệu JSON, một mẫu sử dụng cho phép trang yêu cầu dữ liệu từ máy chủ trong một tên miền khác. JSONP là một hướng giải quyết cho vấn đề này, hình thành dạng thay thế cho phương thức gần đây nhất có tên là Chia sẻ dữ liệu gốc đan xen (Cross-Origin Resource Sharing).
Mục lục nội dung
Cách hoạt động giải trí[sửa|sửa mã nguồn]
Khi website có địa chỉ a.com lấy tài liệu từ một địa chỉ khác là b.com sẽ bị số lượng giới hạn gọi là Same origin policy. Theo chủ trương này thì những nhu yếu cần phải có cùng một địa chỉ ( từ a.com gọi a.com ). Để xử lý yếu tố, giải pháp jsonp được đưa ra với hai bước xử lý :
- a.com và b.com quy định chung tham số sẽ trả về (ví dụ “callback”)trên URL
- a.com định nghĩa thực hiện (implement) hàm “callback”
- Từ nơi gọi (a.com) dùng javascript yêu cầu (gọi) máy chủ đích (b.com) theo URL quy định ví dụ `http://myserver/getjson?callback=mycallback`link hỏng]
- Máy chủ đích (b.com) xử lý dữ liệu, và thực hiện việc gọi hàm “callback” được truyền theo URL
Cụ thể mã hoạt động như sau
Bạn đang đọc: JSONP – Wikipedia tiếng Việt
- Phía Client (web browser)
Mã nơi gọi nhu yếu ( viết với jquery ) :
USD.ajax( { url:" http://myserver/getjson?callback=mycallback ", / / quan tâm chữ mycallback = hàm phải a.com phải thực thi, . / / ở đây jquery tự động hóa gán vào hàm success , data: {" userid ": " 1234 "}, / / tùy chọn dataType: ' json ', success:function(j) { alert(" Success : " +j) ; / / hàm " f " } , error:function(a, b) { alert(" Error ") ; } } ) ;
- Phía Server
Lưu ý: Server phải lấy tham số callback gọi từ client
Mã server vấn đáp ( python )
# 1. lấy tên hàm callback f=
self.request.params.get(' callback ') # hàm f # 2. vấn đáp với tài liệu json { ' a ' : 1 } self.response.out.write(cb+" ({ a : 1 }) ") # tương tự với việc gọi hàm f ( { a : 1 } )
Mã server vấn đáp ( PHP )
/ / 1. lấy tên hàm callback USD cb = USD _GET[' callback '] # 2. vấn đáp với tài liệu json { ' a ' : 1 } USD array = array(' a '=>1) ; echo USD cb." ( ".json_encode(USD array)." ) ; "
Trong khi ” nhãn ” ( tiền tố ) là đặc trưng cho tên của hàm callback được định nghĩa trong việc thực thi của trình duyệt, nó cũng hoàn toàn có thể là một biến gán, một mệnh đề điều kiện kèm theo, hoặc bất kể mệnh đề Javascript nào .
Dòng phản hồi tới một yêu cầu JSONP (hay gọi là một phản hồi theo mẫu sử dụng JSONP) không phải là JSON và không phân tích cú pháp như JSON, tải trọng trả về có thể là biểu thức Javascript nào đó và không cần bất cứ dạng JSON nào hết. Tuy nhiên, thông thường nó là đoạn mã Javascript thực hiện gọi hàm trên một vài định JSON. Hay nói cách khác, việc sử dụng một JSONP cung cấp cross-domain truy cập vào một JSON API, bằng cách đóng gói tải trọng JSON trong hàm gọi.
Vấn đề bảo mật thông tin[sửa|sửa mã nguồn]
Các thẻ tag gồm có trong những máy chủ liên kết được cho phép những máy chủ này nhúng bất kể nội dung nào vào một website. Nếu máy chủ liên kết có những mối nguy hại mà được cho phép nhúng mã JavaScript, rủi ro tiềm ẩn máy chủ gốc bị tiến công sẽ tăng lên .Một nỗ lực dùng để định nghĩa một tập số lượng giới hạn cho JSON-P [ 1 ] mà những trình duyệt hoàn toàn có thể buộc những đoạn ngữ cảnh nhu yếu với dạng MINE đó là ” application / json-p “. Nếu những phản hồi không nghiên cứu và phân tích cú pháp như cách những nghiên cứu và phân tích của JSON-P làm thì trình duyệt sẽ đẩy ra lỗi và bỏ lỡ hàng loạt dòng nội dung phản hồi .
Vào tháng 7 năm 2005, George Jempty ý kiến đề nghị một tùy chọn gán biến vào trước JSON. [ 2 ] [ 3 ] Với đề xuất khởi đầu cho JSONP, padding là một công dụng gọi lại, Open đã được triển khai bởi Bob Ippolito trong tháng 12 năm 2005
Liên kết ngoài[sửa|sửa mã nguồn]
Source: https://mindovermetal.org
Category: Wiki là gì