2014-11-05 170 views
0

我有一個java服務,它使用xmlHttpRequest在JavaScript中調用,它正在返回XML數據。它工作正常,IE 8以上。現在我們試圖在IE 11中,鉻和Mozilla它給500(內部服務器錯誤)。代碼如下。跨域請求無法正常工作

request = new XMLHttpRequest(); 
request.open('POST', SERVERHOSTNAME+"/XXXXXX/XXXXXX/XXXXX/XXXXXInsert"); 
request.send(req,300000); 

谷歌搜索後,我發現它涉及跨域請求,並使用下面的代碼。

request.setRequestHeader("Access-Control-Allow-Origin", SERVERHOSTNAME); 

增加了行以上code..Now我沒有得到任何錯誤,也沒有輸出我reponseText爲空.. 後來我試着用$.ajax 代碼如下:

$.ajax({ 
    url:url, 
    type: "POST", 
    data:req, 
    dataType:"xml", 
    crossDomain:true, 
    success: function (response) { 
     alert(response); 
    }, 
    error:function(error1) 
    { 
     alert(error1); 
    } 
}); 

我得到相同的錯誤...請幫助我。一件事是我現在不能改變服務..

+0

允許克羅姆跨瀏覽器的請求。檢查類似的問題.. http://stackoverflow.com/questions/2600574/crossdomain-settings-in-google-chrome ..啓動crome.exe使用--disable-web-security作爲參數ie「chrome.exe --disable-網絡安全「 – Girish 2014-11-05 07:50:54

+0

感謝girish您的答覆..我不能使用這個選項,因爲我不能告訴所有我的用戶在這種模式下啓動它。 – aravind 2014-11-05 08:05:41

+1

'Access-Control-Allow-Origin'是**響應**標頭,而不是請求標頭。 – Quentin 2014-11-05 09:51:35

回答

0

單線這有助於我是添加

request = new XMLHttpRequest(); 
request.open('POST', SERVERHOSTNAME+"/XXXXXX/XXXXXX/XXXXX/XXXXXInsert"); 
request.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
request.send(req,300000); 

我發現500錯誤不僅關係到跨域,甚至其他東西..

0

其實它不是你誰應該設置標題。服務器應在響應中設置標題Access-Control-Allow-Origin: *

瀏覽器發現您正在發送跨域請求。由於CSRF和XSS等跨域請求存在安全問題,瀏覽器會通過發送另一個請求並檢查響應頭來檢查服務器是否允許跨域請求。如果服務器沒有,瀏覽器顯示錯誤。如果服務器確實發送了請求並獲得響應。在你的情況下,我認爲服務器不會在響應中設置標題..

您可以聯繫服務器管理員並要求他們從服務器端設置該標頭。否則,你可能會嘗試JSONP。 Basic example of using .ajax() with JSONP?

+1

同源策略與XSS無關,與CSRF無關。 – Quentin 2014-11-05 09:52:38

+0

爲什麼不呢?請參閱http://msdn.microsoft.com/en-us/library/cc709423(v=vs.85).aspx – 2014-11-05 09:55:30

+0

XSS和CSRF攻擊都依賴於服務器用提交的數據做某事。雖然同源策略(對於需要預檢OPTIONS檢查的複雜請求)將防止攻擊者利用XHR執行這些操作,但它不會阻止他們製作一個'

'並將其提交給JS 。同源策略可防止攻擊者*將請求的響應*讀取到其他來源。它是爲了保護瀏覽器用戶和正在進行請求的站點之間的私人數據。 – Quentin 2014-11-05 10:03:28

-2

請嘗試在後端調試您的代碼。

通過調用URL在您的AJAX調用中引用的腳本來創建斷點。我相信這會啓發你的問題。

如果您在後端的腳本沒有觸發調試,那麼您的AJAX調用或您的其他JS腳本中可能有錯誤。