Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浏览器上下载csv文件_Javascript_Java_Angularjs_Csv_Servlets - Fatal编程技术网

Javascript 在浏览器上下载csv文件

Javascript 在浏览器上下载csv文件,javascript,java,angularjs,csv,servlets,Javascript,Java,Angularjs,Csv,Servlets,我有RESTAPI,它发送csv字符串,如 "aa,bb\n cc,dd" 以下是Rest服务代码: @GET @Path("/getCsv") @Produces({"text/csv"}) public String getCSV( ) { return "aa,ba,\n,ac,da"; } 在UI端 生成get请求代码的角度资源代码如下: angular.module('csvHelper', ['ngResource','

我有RESTAPI,它发送csv字符串,如

"aa,bb\n cc,dd"
以下是Rest服务代码:

@GET
    @Path("/getCsv")
    @Produces({"text/csv"})
    public String getCSV(   ) {
        return "aa,ba,\n,ac,da";    
    }
在UI端

生成get请求代码的角度资源代码如下:

angular.module('csvHelper', ['ngResource','configuration']).factory('csvHelper', function($resource,$rootScope){
            return $resource(URL+'/api/getCsv/', {}, { 
                query: {method:'GET', params:{}, cache :true}
            });
            });
发出get请求并生成csv的代码如下

csvHelper.query({}, function(response) {
                 def.resolve(response);  
                 },function(response) {
                 def.reject(response);  
                 });

           var prom = def.promise;
            prom.then(function(text) {              
                $window.open("data:text/csv;charset=utf-8," + encodeURIComponent(text));            
            }, function(error) {
                    console.log('promise failed', error);
            });
在网络选项卡中,我看到rest API正确发送数据:

   "aa,ba,\n,ac,da"
但是当我下载csv文件时,我看到里面

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
我做错了什么

编辑

我厌倦了在控制台上打印响应,这就是我看到的:

[e { 0="a",  $get=function(),  $save=function(),  more...}, e { 0="a",  $get=function(),  $save=function(),  more...}, e { 0=",",  $get=function(),  $save=function(),  more...}, e { 0="b",  $get=function(),  $save=function(),  more...}, e { 0="a",  $get=function(),  $save=function(),  more...}, e { 0=",",  $get=function(),  $save=function(),  more...}, e { 0="\n",  $get=function(),  $save=function(),  more...}, e { 0=",",  $get=function(),  $save=function(),  more...}, e { 0="a",  $get=function(),  $save=function(),  more...}, e { 0="c",  $get=function(),  $save=function(),  more...}, e { 0=",",  $get=function(),  $save=function(),  more...}, e { 0="d",  $get=function(),  $save=function(),  more...}, e { 0="a",  $get=function(),  $save=function(),  more...}]
编辑2

我将逻辑更改为使用$http,如下所示:

$http.get("http://myurl.com/api/getcsv")
              .success(function (response) {console.log(success)});
我看到控制台上打印的成功消息,但没有看到弹出窗口

当我点击浏览器时,我看到下载文件的弹出窗口

我错过了什么

编辑3

这种改变奏效了

 $http.get(compiledUrl).then(function (response) {               
                          $window.open("data:text/csv;charset=utf-8," + encodeURIComponent(response.data));                             
                  },function(response){
                      console.log("error");                  
                  });   

如果您只想下载CSV字符串,那么应该使用$http而不是$resource

$resource返回:一个资源“类”对象,其中包含用于默认资源操作集的方法,可以选择使用自定义操作进行扩展


如果您只想下载CSV字符串,应该使用$http而不是$resource

$resource返回:一个资源“类”对象,其中包含用于默认资源操作集的方法,可以选择使用自定义操作进行扩展


您可以使用两个自定义函数

一,

并使用上述功能下载result.csv文件

  if(data.userlog == '')
            return;
        JSONToCSVConvertor(data.userlog, true);

您可以使用两个自定义函数

一,

并使用上述功能下载result.csv文件

  if(data.userlog == '')
            return;
        JSONToCSVConvertor(data.userlog, true);

似乎您需要
JSON.stringify(text)
。您还应该使用
encodeURI()
而不是encodeURIComponent()。是的,试试encodeURI。似乎不需要JSON.stringify,因为您正在返回文本。它不是JSON数据。如何使用JSON.stringify?请参阅第二条注释,因为某些原因,您没有返回普通字符串。尝试更改products注释,使其返回@products({“text/plain”})。目标是让您的响应成为字符串。似乎您需要
JSON.stringify(text)
。您还应该使用
encodeURI()
而不是encodeURIComponent()。是的,试试encodeURI。似乎不需要JSON.stringify,因为您正在返回文本。它不是JSON数据。如何使用JSON.stringify?请参阅第二条注释,因为某些原因,您没有返回普通字符串。尝试更改products注释,使其返回@products({“text/plain”})。目标是使您的响应成为字符串。$http返回承诺。。。所以,同样的逻辑是正确的,请用最新的代码编辑原始问题中的代码,以便我可以看一下。。。或者把它放进一个弹子里,它起作用了。谢谢我更改了代码,如编辑3$http返回承诺中所示。。。所以,同样的逻辑是正确的,请用最新的代码编辑原始问题中的代码,以便我可以看一下。。。或者把它放进一个弹子里,它起作用了。谢谢我更改了代码,如编辑3所示
  if(data.userlog == '')
            return;
        JSONToCSVConvertor(data.userlog, true);