2012-06-22 74 views
4

我有我試圖查詢外部服務器上的數據庫。爲此,我要在本地服務器(Tomcat)上創建一個附加了查詢的頁面的AJAX調用(只是XMLHttpRequest對象 - 我沒有使用任何JavaScript庫)。將完全相同的URL粘貼到Firefox中會導致它嘗試下載XML文檔。我的目標是使用AJAX來獲取該XML文檔。AJAX不處理重定向302

我遇到的問題是,當我做與AJAX調用,螢火蟲表明GET響應返回302「已暫時移動」用一個紅色的X旁邊。 GET響應的頭部具有帶OAuth授權的Location參數,當我複製並粘貼位置參數時,它將我帶到正確的頁面(告訴我要下載XML對象)。

編輯:我想它使用jQuery的$.get("URL", function(data){alert(data)});,同樣的事情發生了 - 毫無戒備,但在Firebug紅色GET請求和302。

基於這些信息,我認爲我調用數據庫第一次嘗試我重定向到一些OAuth的東西,然後返回一個授權的網址來訪問數據庫。這就是我應該用來調用數據庫,取回XML對象,然後做我的事情。 AJAX似乎無法處理重定向,而是崩潰。

我不知道這是正確的,但是,因爲我嘗試使用下面的代碼:

else if (xmlhttp.readyState == 4 && xmlhttp.status == 302){ 
    alert("Hello 302!"); 
} 
else { 
    document.getElementById("test").innerHTML = "On state: " + xmlhttp.readyState + "<br />HTTP Status: " + xmlhttp.status; 
} 

,並沒有給我一個警告 - 相反,它表明,它是在國家4狀態0。我不明白爲什麼它會返回狀態0。(編輯:固定在回答1和沒有提到的錯字改)

所以我的問題是:

  • 究竟什麼是怎麼回事在這?
  • 什麼是0的狀態,爲什麼螢火蟲給我一個X旁邊302控制檯,爲什麼沒有重定向?
  • 我該如何解決這個問題?
  • 一旦我解決這個問題,將我能夠抓住該XML文件,或者是有別的東西,我需要做什麼?

編輯更新:這是一個跨站點腳本問題。我繼續在外部服務器上運行完全相同的腳本,並能夠檢索和分析包含查詢結果的XML文檔。唯一的障礙是弄清楚如何從外部服務器執行此操作。我有權訪問外部服務器的配置,並將研究如何操作它以允許通過來自其他站點的數據庫查詢進行訪問。

+0

你可以在這裏發佈一些代碼....你做服務器端的重定向? –

回答

3

由於這是一個Ajax請求,你不能從另一個域中獲取數據:http://en.wikipedia.org/wiki/Same_origin_policy

您在這裏所能做的只是從您自己的服務器(同一個域)請求數據,並從外部數據庫爲您提取數據。

編輯:這種反應是在3年內與現代瀏覽器(IE不是10 <)老現在你可以使用跨源資源共享 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

我已經發現了這個(見編輯),並提出了一個關於它的問題昨天 - http://stackoverflow.com/questions/11195674/running-a-query-and-retrieving-xml-from-an-external-site/11195730 #11195730 我該如何處理數據? –

+0

編寫將在您的服務器(相同域)上運行以從外部數據庫獲取數據的代碼(通過在您的服務器上運行的代碼而不是用戶瀏覽器的HTTP請求)並將其返回給您的ajax請求。 – c2h5oh

1

你必須readystate必須readyState語法錯誤。它是書面的方式,它永遠是4

建議另一塊是隻檢查的4 readyState和302.這樣的status這種說法的測試中,你將能夠解決是否或者不是這是導致你的問題的302。

+0

感謝您指出,但這些部分僅用於測試,並且只是我測試的一部分 - 每當狀態發生更改時,我也會將狀態和狀態寫入控制檯 - 因此語法錯誤不是原因我的問題在這裏。 302從未寫入控制檯。 –

0

嘗試從螢火

See this snapShot

做服務器端的重定向

快照在此快照發送到服務器端(那裏是重定向)

Ajax請求
+0

你能否提供更多細節? –