1

我有一个无法检索 csv 响应的小问题。

这里有一个 csv链接到 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 设置为 text 以便不对数据进行解码。在这种情况下,我收到 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 等进行试验。它没有帮助。

4

2 回答 2

1

dataType: "text"会是正确的。听起来您遇到了Same Origin Policy,它可以防止跨域调用。当您说dataType: "script"jQuery 自动将请求转换为添加script元素而不是执行实际的 ajax 调用。添加script跨域引用脚本的元素并不违反 SOP(这就是为什么我们可以使用 Google 和 Microsoft 之类的 CDN 作为通用脚本的原因)。但是在获取 CSV 时不能这样做,因为 CSV(当然)不是有效的 JavaScript 代码。

如果您从中检索的服务器在您的控制之下,并且您使用的是现代浏览器(在这种情况下,这意味着任何模糊的最新版本的 Chrome、Firefox 或 Opera,或者使用 IE9 或更高版本),您可以实现跨域资源共享,如果服务器允许请求文档的源源,则允许跨域 ajax 调用。CORS 基本上意味着响应 HTTPOPTIONS调用,该调用询问是否可以发送带有适当标头的 ajax 调用。

于 2013-03-25T07:44:27.320 回答
0

在我看来,这是一个不可接受的跨域请求。阅读此处此处了解更多信息

于 2013-03-25T07:48:43.240 回答