在没有xml文件扩展名的页面中获取带有HTTP请求的xml

时间:2011-06-17 18:26:58

标签: jquery xml httprequest

我正在尝试使用jquestys ajax函数的HTTPRequest来从页面获取xml。该函数没有返回任何内容。我之所以无效的理论是因为我所点击的页面的文件扩展名为“.ns”,而不是“.xml”。这是我正在点击的页面的完整页面源。

   <?xml version="1.0" encoding="UTF-8"?>
<logged_in_reps>
</logged_in_reps>

如何从HTTPRequest获取此XML?

一些可能有用的附加信息:当我保存网页时,它保存为“command.ns.xml”(其中url只有.ns而不是.xml)以及当我在同一目录中点击此页面时作为我自己的文件(扩展名为.xml)有请求,它工作正常。

发出请求的文件所在的域名是“www.csun.edu”,我正在点击的页面是“remotesupport.csun.edu”。这可能是个问题吗?

以下是拨打电话的代码(很遗憾,我无法提供我正在点击的网址的用户名和密码)

$.ajax({
    url: 'https://remotesupport.csun.edu/api/command.ns?username=user&password=pass&action=get_logged_in_reps',
    type: 'GET',
    datatype: 'xml',
    success: function(xml) {
        alert(xml);
    }
});

3 个答案:

答案 0 :(得分:1)

要解决同源策略问题,以及要从中获取XML的服务器不支持JSONP这一事实,您可以使用YQL。

Here's an example

然后,您可以将其用作JSONP请求的URL:

http://query.yahooapis.com/v1/public/yql?q=select * from xml where url="http://the-xml-url.com"

所以对于你的问题,你会做这样的事情:

yql_url = function(source_url) {
  return "http://query.yahooapis.com/v1/public/yql?q=select * from xml where url=\"" + source_url + "\"";
};

$.ajax({
    url: yql_url('https://remotesupport.csun.edu/api/command.ns?username=user&password=pass&action=get_logged_in_reps'),
    type: 'GET',
    dataType: 'xml',
    success: function(xml) {
        console.log($(xml).find('result'));
    }
});

答案 1 :(得分:0)

有两个主要问题。

首先,由于Same Origin Policy,您被拒绝访问该XML文件。

其次,必须将dataType参数用作该精确字符串。

答案 2 :(得分:0)

是的,问题是名为Same Origin Policy的安全限制。

您可以使用JSONP技术规避它(请参阅JQuery支持解释here),但这需要您包装生成的XML输出。

另一种解决方案是通过源服务器代理您的Ajax请求(即,在您的情况下为www.csun.edu)。