我有一个小问题,就是无法检索csv响应。
这里有一个csv link to csv
我正在尝试检索此数据,但是响应中的特殊字符存在问题。
我成功收到了数据但是jQuery尝试解码它并通过语法错误: 我的要求是:
$.ajax({
url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv',
dataType: "script",
success: function(data){
alert('success');
},
error: function(test1, test2, test3) {
alert('error');
}
});
错误是(指向%字符)
SyntaxError: syntax error
1004+%28922%2F82%29,SamJohnston,2008-07-26+09%3A40,2013-03-07+18%
我还尝试将dataType设置为文本,以便不解码数据。在这种情况下,我收到ajax请求的错误。
$.ajax({
url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv',
dataType: "text",
success: function(data){
alert('success');
},
error: function(test1, test2, test3) {
alert('error');
}
});
我尝试使用.ajax()参数试验contentType,dataType,scriptCharset等。它没有帮助。
答案 0 :(得分:1)
dataType: "text"
是正确的。听起来你正在遇到Same Origin Policy,这会阻止跨域调用。当你说dataType: "script"
时,jQuery会自动将请求转换为添加script
元素,而不是进行实际的ajax调用。添加引用跨域脚本的script
元素并不违反SOP(这就是为什么我们可以使用像谷歌和微软这样的CDN用于常见脚本)。但是在抓取CSV时你不能这样做,因为CSV当然不是有效的JavaScript代码。
如果您正在检索的服务器在您的控制之下,并且您使用的是现代浏览器(in this case表示任何模糊的Chrome,Firefox或Opera版本,或使用IE9或更高版本) ),您可以实现Cross-Origin Resource Sharing,如果服务器允许请求文档的源来源,则允许跨源Ajax调用。 CORS基本上意味着响应HTTP OPTIONS
调用,询问是否可以使用适当的头发送ajax调用。
答案 1 :(得分:0)