无法通过ajax请求获取CSV文本

时间:2013-03-25 07:42:52

标签: jquery ajax csv syntax-error special-characters

我有一个小问题,就是无法检索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等。它没有帮助。

2 个答案:

答案 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)

在我看来,这是一个跨域请求,这是不可接受的。阅读herehere了解详情