无法获得通过Ajax请求CSV文本(Cannot get CSV text via ajax req

2019-10-17 21:18发布

我不是abble检索CSV响应的一个小问题。

有可用的CSV这里链接到CSV

我想检索此数据,但有是在效应初探特殊字符的问题。

我successfuly收到数据,但随后的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%

我也试着设置具体的数据类型,以便将数据未解码的文本。 在这种情况下,我得到了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');
    }
});

我试图与阿贾克斯进行实验()的contentType参数,数据类型scriptCharset等它没有帮助。

Answer 1:

在我看来,这是不能接受的跨域请求。 阅读在这里和这里获取更多信息



Answer 2:

dataType: "text"是正确的。 这听起来像你正在运行到同源策略 ,以防止跨域调用。 当你说dataType: "script" ,jQuery的自动转换请求为添加script元素,而不是做一个实际的AJAX调用。 添加script引用脚本跨域元素是不是违反了SOP的(这就是为什么我们可以使用像谷歌的和微软的共同脚本的CDN)。 但抓住CSV,当你不能这样做,因为CSV不是(当然)有效的JavaScript代码。

如果你从检索服务器是你的控制之下,如果您使用的是最新的浏览器(它在这种情况下是指任何含糊地最近的Chrome,Firefox或Opera或使用IE9或更高版本),可以实现跨来源资源共享 ,它允许跨域AJAX调用如果服务器允许请求文件的源来源。 CORS基本上意味着响应的HTTP OPTIONS致电询问是否也没关系发送适当的报头Ajax调用。



文章来源: Cannot get CSV text via ajax request