Angular http.get不喜欢开头和结尾带方括号的文本文件

时间:2015-03-31 02:46:41

标签: javascript angularjs

我有一些Angular代码从S3获取文本文件然后显示它,但是如果文本文件以一个看起来像方括号内的标记的方式开始和结束,则http调用会出错。所以这是代码:

                    $http.get(url).success(function(data, status, headers, config) {
                            console.log("success " + data);
                    }).
                    error(function(data, status, headers, config) {
                            console.log("error");

                    });

然后生成错误的文件将是:

            [image: image1.png]

            lispum iupsum oeri lispum iupsum oeri

            [image: image1.png]

让我烦恼,如果只有一个"标签,那就不会发生。在文件的顶部或底部,似乎都有。删除其中任何东西,即时工作。任何人都知道为什么会这样或者解决方法?

如果我在console.log中错误例程中的错误,数据,状态和标题都被设置为undefined。我也得到了这个Angular错误:

            SyntaxError: Unexpected token i
                at Object.parse (native)
                at oc (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:14:156)
                at Yb (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:77:125)
                at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:77:487
                at s (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:7:302)
                at Yc (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:77:469)
                at c (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:79:109)
                at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:112:276
                at l.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:126:84)
                at l.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js:123:195)

1 个答案:

答案 0 :(得分:3)

由于角度$http服务正在尝试使用JSON模式匹配来解析您的数据,因此当它遇到来自服务器的流时,该流以[开头并以]结尾,它会将其解释为JSON数组并尝试构建数据的对象表示,这显然是不可能的。

您可以在transformResponse中构建自定义$http.get()参数,以便以与传统解析器不同的方式处理您的数据。像这样的可能工作(注意:未经测试):

$http.get(url,
         {
         transformResponse: function(data){
             //normally we would take the raw data here and do transformations on it,
             //but in your situation, you don't want any transformations done.
             return data;
             }
         }).success(function(data, status, headers, config) {
             console.log("success " + data);
...

基本上,我们不是允许角度来解析数据,而是采用transformResponse并确保数据保持原样。