2010-07-22 134 views
1

對不起,如果我的問題有點重複,但我沒有找到我的問題的答案,所以我張貼在這裏。XML響應解析

所以,這裏是這個URL,我用它來生成一個安全令牌:

api.sandbox.inrix.com/Traffic/Inrix.ashx?Action=GetSecurityToken & VENDORID = 1043016094 & consumerId = 94ce0781- b32f-4da5-b80b-8ca00cfb2194

在瀏覽器中鍵入上述URL的響應是在瀏覽器上顯示的XML樹。我需要在標籤「AuthToken」中提取數據。我用JavaScript編寫了一個代碼,用於從XML文件中提取標籤中的數據,而不是指定XML文件的路徑,我將它傳遞給上述URL。但是,我收到一條提示消息:

訪問受限URI被拒絕。

有什麼建議嗎?

謝謝。

回答

1

所有瀏覽器的安全功能都會阻止您將XMLHttpRequest發送到其他域。這被稱爲Same Origin Policy。有幾種方法來解決相同的原產地政策,

1.使用服務器端語言爲服務提供代理。
通常情況下,你會直接發出請求到Web服務,這又將返回響應,就像這樣:

 
    ╒═══════════════════╕ ──────────────> ╒═══════════════════╕ 
    │ Client/Javascript │      │ Server/WebService │ 
    ╘═══════════════════╛ <────────────── ╘═══════════════════╛ 

代理功能需要編寫一個服務器端腳本來充當中間人:

 
╒═══════════════════╕ ────> ╒════════════════════╕ ────> ╒═══════════════════╕ 
│ Client/Javascript │  │ Same domain server │  │ Server/WebService | 
╘═══════════════════╛ <──── ╘════════════════════╛ <──── ╘═══════════════════╛ 

因此,瀏覽器向同一個域發出請求,它不會被同源策略阻止。服務器反過來向遠程Web服務發出請求,遠程Web服務返回響應。最後,同一個域服務器將該響應返回給仍在等待的腳本。這是有效的,因爲服務器發出的請求不受同源策略的約束。

2.檢查服務是否提供JSONP數據格式。
JSONP通過向當前頁面添加腳本元素來工作,其中src屬性指向Web服務。 Web服務以JavaScript函數調用的形式返回響應,並將JavaScript對象文本中的數據作爲參數傳遞給函數。您只需預先定義該函數,以便在腳本/ Web服務請求完成時,您的預定義函數將與數據一起調用,以便您可以處理它。

+0

感謝您的迴應Andy,但是,請您詳細說明如何使用服務器端語言爲服務提供代理服務? 謝謝 – Jason 2010-07-22 08:28:31

+0

@Jason:對不起,我有點忙。我更新了更多信息和圖表:-) – 2010-07-22 09:22:46