2010-06-28 7 views
9

Tôi có một máy chủ đặt tại example.com đang chạy apache, phục vụ các tệp html tĩnh của tôi.Cuộc gọi Ajax tới tên miền phụ

Tôi cũng có dịch vụ json đặt tại api.example.com đang chạy python với cherrypy.

Yêu cầu người dùng example.com và nhận trang html chỉ mục. Trên trang đó tôi thực hiện một yêu cầu ajax với jquery đến dịch vụ json. document.domain trả về example.com

 $.ajax({ 
     type: 'GET', 
     url: 'http://api.example.com/resource/', 
     dataType: 'json', 
     success: successCallback, 
     error: errorHandler 
    }); 

Tuy nhiên, tôi không thể thấy nội dung phản hồi yêu cầu ajax trong firebug. Điều này khiến tôi tin rằng trình duyệt (FF) không hỗ trợ điều này.

Phương pháp tốt nhất để đạt được điều này là gì? Tôi không muốn sử dụng bất kỳ proxy trên phụ trợ apache cho example.com nếu có thể.

+0

Tên miền phụ khác = miền khác –

+0

Có. Nhưng example.com là tên miền chính cho api.example.com, do đó mối quan hệ giữa các url này phải là cấp độ gốc - con không phải con. – Baversjo

Trả lời

4

Bạn cũng có thể sử dụng JSONP bằng cách thêm gọi lại =? đến cuối url. jQuery đã biết cách xử lý các kiểu yêu cầu này nhưng nó yêu cầu một số thay đổi phía máy chủ để xử lý tham số gọi lại.

0

Theo như tôi biết, bạn không thể thực hiện tên miền chéo AJAX.

Why is cross-domain Ajax a security concern?

Mặc dù tôi đoán bạn có thể làm một workaround IFRAME

Cross Sub Domain Javascript

+2

nhưng không phải là tên miền chéo! – Baversjo

+0

Tôi đoán bạn có thể thực hiện giải pháp IFRAME http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/ – SAGExSDX

+1

Theo cùng chính sách gốc , nó là một tên miền khác: http://en.wikipedia.org/wiki/Same_origin_policy – wsanville

0

yêu cầu AJAX chỉ được hỗ trợ trên cùng một tên miền. Tuy nhiên, bạn có thể viết một proxy http trong ngôn ngữ kịch bản ưa thích của bạn và thực hiện cuộc gọi đến proxy http đó. Bạn có thể kiểm tra số này tutorial trên proxy AJAX được viết bằng php.

+0

Sử dụng proxy không phải là giải pháp tốt cho các ứng dụng có quy mô cao. –

-1

Sử dụng document.domain để đặt tên miền là miền cấp cao nhất thay vì tên miền phụ.

document.domain="example.com" 

Đây là described in detail trên MDN.

+0

Đã được đặt thành tên miền cấp cao nhất như được mô tả ở trên – Baversjo

+3

document.domain chỉ hoạt động cho iframe, chứ không phải yêu cầu ajax – Nathan

0

hãy thử thay đổi tên miền của bạn trong sub-domain của bạn, như thế này

<script type="text/javascript">  
    document.domain = 'example.com'; 
</script> 

nếu không hoạt động, thay đổi document.domain của bạn trong trang tên miền của bạn quá.