Tôi xin lỗi nếu tiếng Anh của tôi không phải là hoàn hảo, như tôi có thể nhìn thấy tôi đã không đủ rõ ràng ... Một trong những mối quan tâm chính của tôi được giải thích bởi người khác ở đây: http://http://forum.jquery.com/topic/cross-domain-ajax-and-ie
Vì vậy, những gì thay thế tồn tại?
1) XDomainRequest
Cá nhân tôi nghĩ rằng đây là cách tốt nhất để thực hiện cross-site scripting trong IE8 + (vì nó được hỗ trợ natively). Vấn đề duy nhất là đó là cách duy nhất của Microsoft. Nhưng như nhiều thứ khác với gia đình IE, chúng ta có thể dễ dàng mở rộng chức năng ajax của JQuery.
Theo tài liệu, bạn sẽ cần chỉ định một số tiêu đề bổ sung trong miền1.tld, for example, in PHP như thế này:
header("Access-Control-Allow-Origin: http://domain2.tld"); //use * for any
Có thể giải pháp thay thế tiếp theo hữu ích để cung cấp việc thực hiện jquery của XDomainRequest;
Cập nhật (a): Có một (không jquery) mà "thay thế" lớp XHR để làm cho nó qua trình duyệt XDR library, nó có trụ sở tại pmxdr client library. Tôi chưa thử.
2) CORS
Vấn đề duy nhất với plugin này là không chính xác một phần mở rộng như các chức năng của nó được đặt tên khác nhau, vì vậy bạn cần phải thay đổi mã của bạn hoặc quấn plugin.
Cập nhật (b): Tôi đã sửa đổi plugin CORS để dễ dàng hơn. Kiểm tra câu trả lời khác của tôi để lấy mã.
3) JsonP in JQuery
này nên là cách dễ nhất để giải quyết vấn đề của tôi (như tôi có quyền kiểm soát của cả hai máy chủ). Thực tế, hầu hết các trình duyệt đều hỗ trợ tính năng tạo trang web chéo, chỉ khi định dạng json được sử dụng (tôi tin rằng xml cũng có thể được sử dụng). Trong trường hợp này, hàm $ .getJSON() được sử dụng. Để làm cho nó hoạt động, bạn cần xác định (như trạng thái tài liệu) callback =? trong URL, ví dụ:
$.getJSON("http://domain2.tld/index.php?callback=?",funciton(res){ ... });
"?" sau khi "gọi lại" sẽ được thay thế bằng một định danh ... trong file php của bạn, bạn cần phải nhận định đó và bao quanh mã Json như thế này:
print_r($_GET["callback"])."(".json_encode($mydata).");";
(tôi rằng ví dụ từ here)
Vấn đề với phương pháp này là nếu bạn muốn truy xuất HTML chỉ, nó phải nằm bên trong một đối tượng json và do đó làm cho quá trình phức tạp hơn một chút và áp đảo.
4) jquery.jsonp plugin
Nếu bạn cần kiểm chứng thực thêm và các tính năng hỗ trợ JSONP mẹ đẻ trong JQuery, sau đó thử plugin này mà cũng sẽ đơn giản hóa quá trình này.
5) xdomainajax
Plugin này sử dụng một aproach thú vị sử dụng dịch vụ của Yahoo YQL, trong đó bất kỳ trang web (hoặc một phần của nó) có thể được chuyển đổi sang Json, làm cho nó có thể để nhập nó vào javascript. Phương pháp này là tốt cho những tình huống mà bạn không thể thay đổi định dạng gốc.
6) flXHR
Giải pháp này sử dụng flash (swf) để đạt được sự kỳ diệu. Tôi có thể nói rằng đây là một cách rất nhanh chóng để đạt được gần như một thực hiện hoàn toàn qua trình duyệt (vì nó dựa vào hỗ trợ flash). Phương pháp này có thể là lý tưởng cho những trang web trong đó flash sẽ có mặt (chắc chắn). Tuy nhiên, nếu trang web của bạn không yêu cầu flash, thì điều đó trở thành bất lợi chính khi người dùng cần phải cài đặt flash theo thứ tự này để hoạt động.
7) xdajax
Giải pháp này có trụ sở tại thực hiện YUI cùng với cách tiếp cận "Flash".
8) Nếu không có tùy chọn nào trước đó tốt cho bạn, hãy nhớ rằng bạn vẫn có thể sử dụng thủ thuật chèn thẻ cũ để nhập mã JS.
9) Giảm mức bảo mật IE xuống mức tối thiểu cũng giải quyết được sự cố. Nhưng tôi nghĩ sẽ không tốt nếu có một thông điệp như thế này: "Hãy hạ thấp cài đặt bảo mật của bạn để sử dụng trang này" ... lol
Tôi hy vọng điều này có thể giúp những người khác trong tình huống tương tự.
Cảm ơn bạn vì điều này! Tuy nhiên, trong việc sử dụng điều này cho một chút của một trường hợp cạnh gần đây, tôi phát hiện ra rằng nó hơi phá vỡ các chức năng bản địa của '$ .get' và' $ .post', mà mỗi trả về một đối tượng jqXHR. Điều này có thể dễ dàng sửa bằng cách sửa đổi các khối try trong mã của bạn để đọc 'return $ ._ get (url, dữ liệu, gọi lại, type);' và 'return $ ._ post (url, data, callback, type);' – itsmequinn