3

当使用 jQuery 'GET' 函数从服务器读取 CSV 文件时,我没有得到任何数据。当我使用 FireBug 查看代码时,我可以看到 GET 请求已发送,返回值为“200 OK”。我还看到正确返回了标头,因此肯定发出了请求,并返回了数据。这也是我在 Wireshark 中看到的。在这里,我看到 CSV 文件的完整内容作为标准 HTTP 响应返回。
但是我的脚本中没有实际数据。Firebug 显示一个空响应,并且永远不会调用“成功”函数。有什么问题?

编辑:我的问题似乎缺少信息的重要部分。以下代码在我的本地计算机上运行,​​并由 Firefox 中的 Aptana Studio 使用内置测试服务器启动。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>       
        <title>New Web Project</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="jquery.js" type="text/javascript" charset="utf-8"></script>

       <script type="text/javascript">
        var csvData;
        $(document).ready(function() {
           $("#btnGET").click(function() {
                csvData = $.ajax({
                    type: "GET",
                    url: "http://www.mywebsite.com/data/sample_file.csv",
                    dataType: "text/csv",
                    success: function () {
                       alert("done!"+ csvData.getAllResponseHeaders())
                     }
                });
           });
        }) 
 </script>
 </head>   

     <body>
        <h1>New Web Project Page</h1>
        <button id="btnGET">GET Data</button>
    </body>
</html>
4

5 回答 5

2

该代码不起作用,因为我尝试进行跨域 GET。页面和脚本托管在我的本地计算机上,GET 尝试从完全不同的域中检索数据。尽管在技术上是可行的,但它被所有现代浏览器阻止,因为它是一个安全漏洞。
Frederick Behrends 为我指明了正确的方向。正如他还提到的,唯一允许的跨域 GET 是使用“jsonp”。

以下文本取自 jQuery 文档:
“由于浏览器安全限制,大多数“Ajax”请求都受制于相同的源策略;该请求无法成功地从不同的域、子域、端口或协议检索数据。”

于 2012-07-10T19:08:07.370 回答
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>       
        <title>New Web Project</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="jquery.js" type="text/javascript" charset="utf-8"></script>

       <script type="text/javascript">
        var csvData;
        $(document).ready(function() {
           $("#btnGET").click(function() {
                csvData = $.ajax({
                    type: "GET",
                    url: "http://www.mywebsite.com/data/sample_file.csv",
                    dataType: "text/csv",
                    success: function (result) {
                       alert(result);
                       alert("done!"+ csvData.getAllResponseHeaders())
                     }
                });
           });
        }) 
 </script>
 </head>   

     <body>
        <h1>New Web Project Page</h1>
        <button id="btnGET">GET Data</button>
    </body>
</html>
于 2012-07-10T09:02:43.167 回答
1

据我了解 dataType 只接受“文本”作为参数,你可以试试吗?您也可以参考以下页面: http ://api.jquery.com/jQuery.ajax/

谢谢。

于 2012-07-10T09:13:56.290 回答
0
                $.ajax({
                    type: "GET",
                    url: "http://www.mywebsite.com/data/sample_file.csv",
                    dataType: "text/csv",
                    success: function (data) {
                       csvData = data;
                       //alert("done!"+ csvData.getAllResponseHeaders()) - my fix makes this won't work...
                     }
                });
于 2012-07-10T09:04:06.643 回答
-1

我尝试注释掉 dataType 并且它起作用了。

于 2020-04-16T23:30:51.987 回答