Angularjs在JSON eval之前删除响应数据行

时间:2015-05-30 17:08:39

标签: javascript jquery json angularjs jive

我在使用这个特殊的REST API时遇到了Angularjs和jQuery的严重问题。我与所述API不在同一个域中,并且可以获取数据,但是我收到“SyntaxError:invalid label”name“:{”error。

如果我要做$ http.get或$ .get之类的事情,我会在10秒后得到超时。但是,如果我在任一库中使用jsonp,我将在Firebug中看到数据在网络选项卡中返回,但是我在控制台选项卡中收到上述错误。在做了一些研究之后,我看到很多人对API(一个Jive产品)以及与JSON一起返回的这一特定文本行有问题。响应看起来像这样:

throw 'allowIllegalResourceCall is false.';
{"name":{ "givenName": "xxx"}}

最大的问题是第一条“抛出”线。我已经尝试了一些方法来删除该行,但我没有找到正确的方法来做到这一点。我为无法提供代码示例而道歉,但如果有任何方法可以在Angularjs或jQuery中使用它,我会接受它。我不知道答案是在Angularjs拦截器还是transformResponse。

我们将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:2)

AngularJs允许您定义转换http响应数据的方法(这样您就可以删除响应数据的第一行)。您可以为单个请求执行此操作,也可以添加httpInterceptor。

单一请求:

$http.get('...', {
    transformResponse: $http.defaults.transformResponse.unshift(function(data) {
        // Remove first line of response
        data.split("\n").slice(1).join("\n")
    }
});

HttpInterceptor

.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(function() {
      return {
        'request': function(config) {
          config.transformResponse.unshift(function(data) {
            return data.split("\n").slice(1).join("\n")
          })
          return config;
        }
      }
    })
}])

Plunker:http://plnkr.co/edit/6WCxcpmRKxIivl4yK4Fc?p=preview