2010-07-22 262 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