对于大型json字符串-Angular JS,下载失败

时间:2014-03-14 05:01:10

标签: javascript json angularjs

我已经在文件下载的角度编写了一个应用程序,该应用程序仅适用于小型json字符串,但是大型字符串下载失败。任何人都可以告诉我一些解决方案。

我正在使用REST webservice

 var json = _.getJson(); // here json value object be received from a script function 
 var myURL = 'rest/myMethod?jsonValue=' + JSON.stringify(json);
  _.downloadFile(myURL);

downloadFile方法:

downloadFile: function(URL)
{
    $.fileDownload(URL).done(function(e, response)
    {
      console.log('download success');
    }).fail(function(e, response)
    {
      console.log('fail');
    });
}

3 个答案:

答案 0 :(得分:1)

我发现了两个潜在的问题:

  1. 请求网址可能太长(请参阅:this discussion
  2. 字符串化的JSON包含在URL中无效的字符
  3. 如果网址太长,您必须将jsonValue移到请求正文中,而不是将其作为网址参数传递。

    要解决第二个问题,您需要对字符串化值进行URI编码:

    var myURL = 'rest/myMethod?jsonValue=' + encodeURIComponent( JSON.stringify(json) );
    

    BTW,查看失败的参数应该首先指示为什么请求失败。

答案 1 :(得分:1)

根据评论,这里是如何使用Angular进行POST。我只能举个例子。标题可能取决于角度版本等等。

function TestController($scope, $http) {
    $http({
        url: 'yourwebsite',
        method: "POST",
        data: json, //this is your json data string
        headers: {
           'Content-type': 'application/json'
        }
    }).success(function (data, status, headers, config) {
        //upload succesfull. maybe update scope with a message?
    }).error(function (data, status, headers, config) {
        //upload failed
    });

}

答案 2 :(得分:0)

以下是使用$ http的Angular发送帖子请求并从服务器下载XML文件的示例。



$http({
            url: '$your_URL_here$', // you should replace $your_URL_here$ by your own url
            method: 'POST',
            responseType: 'arraybuffer',
            data: postJson, //***this is the request json data for post***
            headers: {
                'Content-type': 'application/json',
                'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
            }
        }).success(function(data){
                var blob = new Blob([data], {
                    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                });                
                saveAs(blob, $fileName$);// you should replace $fileName$ by your own fileName
            }
        }).error(function(data){
            //Some error handling method here
        });




请注意,您应该导入FileSaver.js以保存来自' arraybuffer'的responseType。