使用jQuery GET加载CSV文件会返回标头,但不会返回数据

时间:2012-07-10 09:00:22

标签: jquery csv

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

编辑:我的问题似乎缺少信息的重要部分。以下代码在我的本地计算机上运行,​​由使用内置测试服务器的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>

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

由于我理解dataType只接受“text”作为参数,可能你可以去吗?您也可以参考以下页面: http://api.jquery.com/jQuery.ajax/

感谢。

答案 2 :(得分:1)

代码不起作用,因为我尝试进行跨域GET。页面和脚本托管在我的本地计算机上,GET尝试从完全不同的域中检索数据。虽然技术上可行,但它被所有现代浏览器阻止,因为它是一个安全漏洞 弗雷德里克·贝伦茨为我指出了正确的方向。而且他还提到允许的唯一跨域GET是使用“jsonp”。

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

答案 3 :(得分: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...
                     }
                });

答案 4 :(得分:-1)

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