2010-05-25 35 views
5

OK đây là tình huống: Tôi có một CMS được lưu trữ bên ngoài hoạt động tốt với 99% nhu cầu của chúng tôi. Tuy nhiên vào những điều cao cấp hơn tôi tiêm CSS + JS của riêng tôi và làm phép thuật. Vấn đề tôi đang chạy vào đang tải một trang HTML đơn giản từ các cuộc gọi jQuery.ajax(). Nó xuất hiện để làm việc theo nghĩa là không có cảnh báo hoặc lỗi được ném; tuy nhiên trong trình xử lý thành công của tôi (IS được chạy), câu trả lời trống!jQuery AJAX với hai tên miền

Tôi đã gãi đầu suốt buổi sáng để tìm hiểu điều này và điều duy nhất tôi có thể nghĩ là có liên quan đến vấn đề miền chéo (mặc dù nó dường như hoạt động).

Tiêm JavaScript:

$(document).ready(function() { 
    doui(); 
}); 
function doui() { 
    $.ajax({ 
     url: 'http://apps.mydomain.com/css/feecalc/ui.htm', 
     cache: false, 
     success: ajax_createUI, 
     charset: "utf-8", 
     error: function(e) { 
      alert(e); 
     } 
    }); 
} 
function ajax_createUI(data, textStatus) { 
    alert(data); 
    $("#ajax-content").html(data); 
} 

My ajax_createUI() xử lý thành công được gọi và textStatus là "thành công"; tuy nhiên dữ liệu trống.

này JS tập tin thường trú @http://apps.mydomain.com/css/js/feecalc.js tuy nhiên trang web của CMS (mà được JS tiêm vào nó) cư trú @http://www.mydomain.com/

Tôi chỉ là ngu ngốc hoặc là nó là một lỗi mà có vẻ như nó nên được làm việc nhưng isn 't?

Trả lời

5

Đây không phải là lỗi, nó là một tính năng của trình duyệt hiện đại: Same Origin Policy Có ba cách để giải quyết vấn đề này. Nhìn vào cách bạn đã bị tấn công vấn đề, tôi sẽ nhìn vào jsonp

+0

Có lý do nào đó không phải là do lỗi? Tôi giả sử (và tôi đang đọc liên kết của bạn) rằng nguồn gốc của trang và không phải là tập lệnh? –

+0

Điều này có đúng không: tên miền www.natronacounty-wy.gov nhận tập lệnh bạn dán vào trong tập lệnh, sau đó tập lệnh đó gọi http: //apps.natronacount-wy ... từ trang www.natronacounty-wv.gov? – Nick

+0

Chính xác. CMS là hệ thống www, trong CMS tôi dán

1

Tôi nghĩ rằng phương pháp thích hợp nhất cho tải một trang là .load()

Thứ hai, như Nick nói, bạn đang gặp vấn đề miền chéo . Một tùy chọn sẽ thực thi tải() đối với một trang trên trang web của bạn hoạt động như proxy để yêu cầu trang bạn cần.

Ví dụ: Bạn yêu cầu .load (/myPage.aspx) và MyPage.aspx yêu cầu http://apps.natronacounty-wy.gov/css/feecalc/ui.htm và gửi lại cho khách hàng

+1

Tôi không thể làm điều đó vì www không phải là máy chủ của tôi, đó là hệ thống CMS của nhà cung cấp. ứng dụng LÀ máy chủ của tôi mà tất cả JS của tôi được lưu trữ trên đó. –

+0

@Andrew Tôi nghĩ rằng bạn là sự hiểu lầm, bạn sẽ viết proxy trên máy chủ của bạn có các cuộc gọi javascript. Bằng cách này bạn viết javascript của bạn để nhấn một trang/servlet địa phương tải nội dung từ xa –

+0

@ Flash84x Tôi không thể viết bất kỳ mã tùy chỉnh nào trên máy chủ có thể ủy quyền các cuộc gọi. Máy chủ duy nhất tôi có quyền truy cập vào là các ứng dụng và nếu tôi có thể đọc kết quả HTTP từ đó tôi sẽ không cần proxy. –

0

Bạn mặc dù có thể truy vấn theo yêu cầu của bạn thông qua YQL (Yahoo! Query Language), trong đó sẽ tạo ra một tệp JSONP (nó thậm chí còn hỗ trợ XMLP -> XML với hàm gọi lại). Điều này có thể làm giảm hiệu suất của bạn, nhưng Yahoo cung cấp các máy chủ nhanh.

+0

Tôi đã thử các plugin jQuery sử dụng YQL và nó đã làm điều tương tự: (http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/ –

+0

Nó thực sự simpel để cuộn của riêng bạn, chỉ cần viết chức năng gọi lại và truy vấn "SELECT * từ html nơi url = '+ url +'", trong khi chọn XML làm đầu ra và hàm gọi lại của bạn làm gọi lại. Bên trong chức năng gọi lại, bạn có thể chọn nội dung bạn muốn hiển thị và thêm nó với DOM. – fb55

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