Angularjs 在 JSON eval 之前删除响应数据行
Angularjs remove line of response data before JSON eval
我在 Angularjs 和 jQuery 方面遇到了一个严重的问题,这个特定的 REST API。我和 API 不在同一个域中,可以取回数据,但是我收到 "SyntaxError: invalid label "name" :{" 错误。
如果我要执行 $http.get 或 $.get 之类的操作,我会在 10 秒后超时。但是,如果我将 jsonp 与任一库一起使用,我将在 Firebug 中看到数据返回到网络选项卡中,但是我在控制台选项卡中收到上述错误。在做了一些研究之后,我看到很多人对 API(一种 Jive 产品)以及与 JSON 一起返回的这一特定文本行有疑问。响应看起来像这样:
throw 'allowIllegalResourceCall is false.';
{"name":{ "givenName": "xxx"}}
最大的问题是第一行 "throw"。我已经尝试了多种方法来删除该行,但我还没有找到正确的方法。对于无法提供代码示例,我深表歉意,但如果有任何方法可以在 Angularjs 或 jQuery 中完成这项工作,我会接受。我不知道答案是否在于 Angularjs 拦截器或 transformResponse。
我们将不胜感激。
谢谢
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;
}
}
})
}])
我在 Angularjs 和 jQuery 方面遇到了一个严重的问题,这个特定的 REST API。我和 API 不在同一个域中,可以取回数据,但是我收到 "SyntaxError: invalid label "name" :{" 错误。
如果我要执行 $http.get 或 $.get 之类的操作,我会在 10 秒后超时。但是,如果我将 jsonp 与任一库一起使用,我将在 Firebug 中看到数据返回到网络选项卡中,但是我在控制台选项卡中收到上述错误。在做了一些研究之后,我看到很多人对 API(一种 Jive 产品)以及与 JSON 一起返回的这一特定文本行有疑问。响应看起来像这样:
throw 'allowIllegalResourceCall is false.';
{"name":{ "givenName": "xxx"}}
最大的问题是第一行 "throw"。我已经尝试了多种方法来删除该行,但我还没有找到正确的方法。对于无法提供代码示例,我深表歉意,但如果有任何方法可以在 Angularjs 或 jQuery 中完成这项工作,我会接受。我不知道答案是否在于 Angularjs 拦截器或 transformResponse。
我们将不胜感激。
谢谢
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;
}
}
})
}])