2016-02-15 30 views
-1

--Ajax方法調用來獲取HTML格式條款的響應CORS問題 - 沒有「訪問控制允許來源」頭

function send_with_ajax(brand) { 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.onreadystatechange = function() { alertContents(httpRequest); }; 
    httpRequest.open("GET", "https://XXXX--LEGACY SYSTEM--XXXX", true); 
    httpRequest.setRequestHeader('Access-Control-Allow-Origin', 'https://XXXX--LEGACY SYSTEM's IP Address--XXXX/'); 
    httpRequest.send(null); 
} 

function alertContents(httpRequest) { 
    alert(httpRequest.readyState); 
    if (httpRequest.readyState == 4) { 
     // everything is good, the response is received 
     if ((httpRequest.status == 200) || (httpRequest.status == 0)) { 
      //Get the httpRequest.responseText 
     } else { 
      //Error with the response or Failed to load the response; 
     } 
    } 
} 

嗨,在上面的JS代碼,我已經創建了一個activeX對象來打擊遺留系統(這意味着在端點Java中不存在與CORS相關的API)。 同樣,我希望收到一個HTML格式類型的響應。從IE瀏覽器(HTML代碼類型)中可以正常工作,但是當使用Chrome瀏覽器(移植到HTML5代碼類型)嘗試時,我最終遇到了CORS問題。好吧...它發生了,我試圖在這裏設置標題來解決它,但它也徒勞無益。有沒有辦法解決這個問題。請小心謹慎,我試圖與端點Java組件不能有任何修改的遺留系統進行交互。請幫助!

+1

'** response **中設置了access-control-allow-origin'標頭,而不是請求...事實上,在請求中設置它們可能會產生不利影響 –

+0

'遺留系統,其中端點java組件不能有任何修改「 - 基本上有兩種選擇,修改服務器或使用服務器的頁面服務從您的請求 –

+0

您即將說客戶端和服務應該駐留在同一臺計算機上以解決此問題......是不是? –

回答

0

您不要在要求設置Access-Control-Allow-Origin,您在響應設置(以及其他一些必需的頭)。服務器是決定是否允許跨源請求的地方(瀏覽器執行的決定)。

我試圖與遺留系統交互,其中端點Java組件不能有任何修改

然後,你不能直接從另一個起源AJAX查詢。相反,您需要某種代理服務器,例如在服務器上(或另一臺服務器上)運行的第二個進程,您可以查詢哪一個進程查詢您實際想要與之通話的那個進程。這是有效的,因爲SOP適用於來自瀏覽器的請求,但非瀏覽器可以根據需要進行跨域請求。

有幾個「CORS代理」項目(這是他們合理的搜索術語),既可以在您的服務器上運行,也可以直接使用,如crossorigin.me(僅作爲示例,而不是代言) ;不知道它是否有用)。如果您使用服務,則必須信任它們,因爲所有數據(在兩個方向上)都流經它們的服務器...

+0

有沒有其他方式沒有使用間歇性組件(代理服務器)??? Mine是一個獨立的HTML頁面...它不需要任何其他的依賴關係......並且最終它能夠以傳統的HTML方式在IE中運行良好......我想在Chrome中保留這個屬性以及HTML5。 如果沒有其他的方法......將不得不與代理服務器意識形態:) –

+0

@VijayLMarcelin:好吧,正如我上面所說,有服務,將爲你做代理。您也可以[使用YQL作爲跨域代理](http:// ajaxian。com/archives/using-yql-as-a-proxy-for-cross-domain-ajax),但是否對您有用,將取決於您從其他來源讀取的內容。 –

+0

Thanks @CrowderTJ!將檢查出來 –

0

克服交叉源限制的一種方法是使用yql yahoo控制檯。您可以在不同域名的網站之間傳輸數據(也適用於您的案例)。你可以看看here。在左側菜單中,轉到data-> html並進行查詢,如select * from html where url="http://your.different.domain.com"然後只需使用yahoo提供的url,不受限制問題

相關問題