我有一个网站,我想向BBC RSS提要提出请求以返回最新消息。问题是我收到以下错误:
Uncaught SyntaxError: Unexpected token <
这是我的代码:
var url = 'http://feeds.bbci.co.uk/news/rss.xml';
$.ajax({
url : url,
dataType : 'jsonp',
contentType : 'text/xml',
success : function(data) {
console.log(data);
}
});
编辑
这是我在服务器上的代码,如以下答案所示:
public XmlDocument callBBCFeed()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://feeds.bbci.co.uk/news/rss.xml");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string result = sr.ReadToEnd();
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
return doc;
}
然后我在我的 JS 代码中调用它,如下所示:
var url = 'http://myServer/Global/callBBCFeed';
$.ajax({
url : url,
dataType : 'xml',
success : function(data) {
console.log(data);
}
});
但是我收到同源策略错误
检查您的 $.ajax 调用:dataType: 'jsonp'
。
RSS 是 XML。由于您的调用需要检索 JSON,因此<
是一个合法字符,不是吗?
阅读jQuery $.ajax文档并查找"dataType"选项:
- http://api.jquery.com/jQuery.ajax/
更新
根据您添加到其他答案中的一些评论,您最初的问题似乎是跨域请求。
最好的解决方案是从服务器端进行跨域调用(使用 ASP.NET C#/VB或其他任何东西中的服务器代码,PHP,Perl,Ruby...),jQuery将调用你的服务器处理程序来检索RSS提要,所以它不再是跨域请求。
您正在向 XML 资源发送跨域 AJAX 请求。由于同源策略限制,这不起作用。
你在这里完全矛盾:
dataType : 'jsonp'
但向 XML 资源发送请求。
允许跨域AJAX调用的JSONP是完全不同的东西。它表示包装在 javascript 函数中的 JSON 响应,可能如下所示:
someFunctionName({"foo":"bar", "baz":"bazzy"})
如果远程服务器不支持 JSONP,则必须在域上编写服务器端脚本,该脚本将充当您和远程域之间的桥梁,以获取 XML 文件。然后使用 jQuery AJAX 向脚本发送请求。
我建议您阅读以下jQuery跨域AJAX指南,了解可以使用的不同技术。