2009-11-19 28 views
10

Tôi có trang web sử dụng XMLHttpRequest (jQuery, trên thực tế). Tôi cũng có một trang web khác chạy trên cùng một máy chủ, phục vụ tệp tập lệnh làm cho XHR yêu cầu quay lại trang web THAT, tức là.Tôi có thể sử dụng XMLHttpRequest trên một cổng khác từ tệp tập lệnh được tải từ cổng đó không?

http://mysite:50000/index.html bao gồm

<script src="http://mysite:9000/otherscript.js"></script> 

http://mysite:9000/otherscript.js bao gồm

$.ajax({ 
    url: 'http://mysite:9000/ajax/stuff' 
}); 

Vấn đề là - điều này không hoạt động. Các yêu cầu AJAX từ tập lệnh được nạp đơn giản không thành công mà không có thông báo lỗi. Từ những gì tôi có thể tìm thấy đây là chính sách gốc cũ. Do tôi kiểm soát cả hai trang web, tôi có thể làm gì để thực hiện công việc này không? Bí quyết "document.domain" dường như không làm gì cho XMLHttpRequest.

Trả lời

10

Không thể thực hiện điều này với XHR. Chính sách cùng miền là rất hạn chế ở đó, cùng một máy chủ, cùng một cổng, cùng một giao thức. Lấy làm tiếc! Bạn sẽ phải sử dụng các thủ thuật khác (iframes, thao tác tiêu đề, vv) để làm cho nó hoạt động.

+0

Bí quyết "thao tác tiêu đề" là gì? – EMP

+0

Nếu bạn đã ký javascript, bạn có thể làm điều này trên FF. – bmargulies

+2

Xem http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/ và http://orensol.com/2009/06/07/cross-domain-ajax-calls-and -iframe-communication-how-to/cho ví dụ. Có jQuery và dojo addons mà bọc công cụ này lên độc đáo. – nitzmahone

10

bạn có thể thực hiện việc này bằng cách thêm tiêu đề Access-Control-Allow-Origin. Nếu bạn đang sử dụng php

header("Access-Control-Allow-Origin: http://example.com"); 

hoặc trong Node.js

response.writeHead(200,{'Access-Controll-Allow-Origin':' http://example.com'}); 

này phải làm các trick cho u nó luôn luôn làm việc cho tôi

0

Tôi chỉ giải quyết một vấn đề tương tự với một PHP dịch vụ tôi hiện đang chơi xung quanh (không chắc chắn về cách liên quan đến giải pháp PHP trực tiếp này, nhưng ...) bằng cách tạo một trang PHP dòng đơn lẻ, SimpleProxy.php:

<?php 
echo file_get_contents('http://localhost:4567'); 
?> 

Và trong XMLHttpRequest của tôi, tôi sử dụng 'SimpleProxy.php' thay cho 'http://localhost:4567', có hiệu quả đặt yêu cầu trên cùng miền với mã .js của tôi.

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