2010-10-01 33 views

Trả lời

18

Câu trả lời ngắn gọn là bạn không thể, vì yêu cầu AJAX được giới hạn ở cùng một miền (phụ) và cổng theo số Same Origin Policy.

Các hạn chế tương tự áp dụng cho các yếu tố iframe: Bạn không thể tạo iframe trỏ đến trang bên ngoài và lấy HTML từ đó.

Cách thông thường là sử dụng tập lệnh phía máy chủ (được viết bằng PHP) hoạt động như một proxy: Nó tìm nạp nội dung của trang web bên ngoài và phân phát lại cho JavaScript. Nó sẽ phải chạy trên cùng một tên miền với trang. Rõ ràng, bằng cách sử dụng giải pháp này, các tham chiếu tương đối với URL, hình ảnh, biểu định kiểu và như vậy (ví dụ: ../images/image.gif) sẽ không còn hoạt động nữa, vì chúng nằm ngoài ngữ cảnh trên trang của bạn. Các trang liên quan đến trang web của bạn sẽ được hiển thị trên trang web của bạn. Cho dù đó là một vấn đề trong tình huống của bạn là không thể nói. Một cách giải quyết khác có thể là sử dụng <base> tag.

+0

Chúng ta có thể làm được. Hãy thử điều này: http://crossorigin.me/ –

+0

Đây là một blog giống nhau: https://blog.codepen.io/2015/07/10/crossorigin-me/ –

+1

@KushalJayswal chính xác là loại "máy chủ kịch bản phụ phục vụ như một proxy "mà tôi đã đề cập. Nó đi kèm với vô số vấn đề, một trong số đó được minh họa bởi trang web hiện đang ngoại tuyến, có lẽ do tải nặng. Đối với bất kỳ loại hình sử dụng chuyên nghiệp nào, dịch vụ đó rất xa "chúng tôi có thể làm điều đó" –

5

Bạn cần jquery $.get

http://api.jquery.com/jQuery.get/

Ví dụ: Thông báo ra các kết quả từ yêu cầu test.cgi với một tải trọng bổ sung dữ liệu (HTML hoặc XML, tùy thuộc vào những gì đã được trả lại).

$.get("test.cgi", { name: "John", time: "2pm" }, 
    function(data){ 
    alert("Data Loaded: " + data); 
    }); 

Chỉnh sửa: điều này chỉ hoạt động nếu trang của bạn nằm trên cùng một tên miền.

+0

Không thể: HTML của iframe' sẽ không thể truy cập được vào JavaScript mẹ do Chính sách xuất xứ giống nhau –

+0

vì vậy sau đó có không có giải pháp nào cả :) – Stefanvds

3

Bạn có thể sử dụng $ .ajax hoặc $ .get để thực hiện cuộc gọi đến URL trên tên miền của riêng bạn và sau đó sử dụng bất kỳ ngôn ngữ phía máy chủ nào bạn đang sử dụng để truy xuất HTML và sau đó trả lại.

Đó là hai yêu cầu HTTP thay vì một yêu cầu nhưng nó sẽ khắc phục được sự cố của bạn.

Bạn cũng có thể lưu trữ HTML của trang bên ngoài trong mã phụ trợ để yêu cầu từ Javascript không phải lúc nào cũng dẫn đến hai yêu cầu HTTP - tất nhiên phụ thuộc vào tần suất HTML bạn muốn lấy sẽ thay đổi.

Một bước ngoặt nhỏ ở trên sẽ là có tác vụ nền chạy trên máy chủ của bạn truy xuất HTMl bên ngoài sau mỗi giây X và lưu cục bộ. Các yêu cầu đối với miền của bạn từ JS của bạn chỉ cần nhận bản sao mới nhất từ ​​máy chủ của bạn. Điều đó có nghĩa là yêu cầu JS của bạn không bị chậm lại bằng cách đợi một yêu cầu HTTP bên ngoài khác.

0

Tất cả các trình duyệt phổ biến không cho phép các cuộc gọi Javasript truy cập bất kỳ Trang nào có miền phụ (phụ) khác do Chính sách xuất xứ giống nhau. Cách duy nhất để làm việc xung quanh đó là thiết lập một số loại "proxy" trên máy chủ của riêng bạn (ví dụ: một tập lệnh php) chạy dưới cùng một miền, lấy thông tin bạn muốn từ nguồn thứ ba và in chúng ra.

0

Bạn có thể thêm ngôn ngữ PHP hoặc bất kỳ ngôn ngữ nào khác của máy chủ vào trang web có thể hoạt động như một proxy cho tập lệnh của bạn để tìm nạp html trang.

Sau đó, bạn có thể gọi proxy phía máy chủ của mình với url bằng cách sử dụng Ajax sẽ trả lại cho bạn HTMl của trang đó.

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