2009-07-29 43 views
6

Tôi có một plugin jQuery hiện có, thực hiện rất nhiều cuộc gọi AJAX (chủ yếu là JSON). Tôi tự hỏi điều gì là nhanh nhất để cho phép nó thực hiện các cuộc gọi qua trang web tức là URL $ .get và $ .post sẽ không nằm trong cùng một tên miền.AJAX chéo trang web bằng cách sử dụng jQuery

Tôi đã nghe nói về JSONP, nhưng đã tự hỏi nếu ai đó có thể cho tôi một ví dụ cụ thể để đi về toàn bộ quá trình. Tôi muốn thực hiện các thay đổi tối thiểu nếu có thể với tập lệnh của mình. Tôi có nên sử dụng một proxy.php các loại?

Cảm ơn bạn đã dành thời gian.

Trả lời

13

JSONP sẽ cho phép bạn thực hiện cuộc gọi qua nhiều trang web. See jQuery docs on that matter.

Khái niệm rất đơn giản: thay vì thực hiện cuộc gọi Ajax bình thường, jQuery sẽ thêm một thẻ <script> vào <head> của bạn. Để làm việc này, dữ liệu JSON của bạn cần được bao bọc trong một cuộc gọi hàm .

Máy chủ của bạn cần gửi thông tin theo cách như vậy (PHP chẳng hạn):

$json = json_encode($data); 
echo $_GET['jsonp_callback'] . '(' . $json . ');'; 

Sau đó, bạn có thể sử dụng jQuery để lấy thông tin rằng:

$.ajax({ 
    dataType: 'jsonp', 
    jsonp: 'jsonp_callback', 
    url: 'http://myotherserver.com/getdata', 
    success: function() { 
    // do stuff 
    }, 
}); 

biết thêm thông tin có sẵn ở đây: What is JSONP?

+0

Tốt! Tôi sẽ tiếp tục và kiểm tra điều này. Ngoại trừ việc tôi nghĩ rằng stating echo nên in biến $ json, và không phải là $ data. Đúng không ? –

+1

@PHP_Jedi: Điều đó sẽ đúng. Tôi vừa sửa chữa lỗi đánh máy đó (thật đáng xấu hổ, đã ở đó trong 2 năm). –

+0

Làm việc như một sự quyến rũ! –

2

Nếu bạn có quyền kiểm soát miền từ xa hoặc miền từ xa có một mã số crossdomain.xml cho phép, bạn có thể thả vào thư viện như flXHR kết hợp với jQuery plugin.

1

Bạn cũng có thể sử dụng CORS thay vì JSONP, hoạt động với ff, chrome, safari. CORS khó thiết lập hơn và chỉ yêu cầu bộ lọc ở phía máy chủ.

Vui lòng xem lại bài viết này.Được giải thích và tương tự. Chỉ có ràng buộc là IE không hỗ trợ phiên bản cũ hơn này của FF, chrome cũng có một số vấn đề.

http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/

+0

Bạn có thể mô tả cách sử dụng nó trong câu trả lời của bạn không? – Ryan

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