我正在尝试使用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);
}
});
答案 0 :(得分:1)
要解决同源策略问题,以及要从中获取XML的服务器不支持JSONP这一事实,您可以使用YQL。
然后,您可以将其用作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)
答案 2 :(得分:0)
是的,问题是名为Same Origin Policy的安全限制。
您可以使用JSONP技术规避它(请参阅JQuery支持解释here),但这需要您包装生成的XML输出。
另一种解决方案是通过源服务器代理您的Ajax请求(即,在您的情况下为www.csun.edu
)。