AngularJS json.parse json 数据的第 1 行第 1 列的数据意外结束
AngularJS json.parse unexpected end of data at line 1 column 1 of the json data
html
<!doctype html>
<html lang="en" ng-app="phonecatApp">
<head>
<meta charset="utf-8">
<title>WrikeAPI</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script src="https://code.angularjs.org/1.4.0-beta.5/angular.js" data-semver="1.4.0-beta.5" data-require="angular.js@1.4.0-beta.5"></script>
<script data-require="angular-route@1.4.0-beta.5" data-semver="1.4.0-beta.5" src="https://code.angularjs.org/1.4.0-beta.5/angular-route.js"></script>
<script>
var wrikeApiControllers = angular.module('wrikeApiControllers', []);
var client_id = "";
var client_secret = "";
var grant_type = "";
var refresh_token = "";
wrikeApiControllers.controller('AccessToken', ['$scope', '$http',
function($scope, $http) {
$http.post('https://www.wrike.com/oauth2/token?client_id='+client_id+'&client_secret='+client_secret+'&grant_type='+ grant_type +'&refresh_token='+refresh_token).
success(function(data, status, headers, config) {
$scope.response = data;
}).
error(function(data, status, headers, config) {
});
}]);
var phonecatApp = angular.module('phonecatApp', [
'ngRoute',
'wrikeApiControllers'
]);
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/access', {
templateUrl: 'display-access-token.html',
controller: 'AccessToken'
}).
otherwise({
redirectTo: '/access'
});
}]);
</script>
</head>
<body>
<div ng-view></div>
</body>
</html>
这是我的显示访问权限-token.html
<ul >
<div ng-repeat="access in response" class="thumbnail">
<p>{{response.access_token}}</p>
<p>{{response.token_type}}</p>
<p>{{response.expires_in}}</p>
<p>{{response.refresh_token}}</p>
</div>
</ul>
当我使用我的网络浏览器或使用 Chrome 扩展邮递员访问 wrike 时,我在这样发帖后收到回复
{
"access_token": "UQldFEZJwifB3PEJWAsvasv3js1uoLk1GCq5ppMGgUijoz8gP46tBxeBd5ud51VGLFNlGjQw-N-N",
"token_type": "bearer",
"expires_in": 3599,
"refresh_token": "8yRHuuzeeEsqE4o0Y1lJe02uhqgGlalxnl798aksCzFn7WxjEtS4iveFhBjEG349w7pDFm3m1sY-A-N"
}
但是当我使用 AngularJS 时我无法得到响应 POST 是成功的但是我没有看到响应。我在网络浏览器中收到此消息 "Json.parse unexpected end of data at line 1 column 1 of the json data"
有什么帮助吗?谢谢
不知道有没有用,你试过启用cors吗?
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = false;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.defaults.headers.common["Accept"] = "application/json";
$httpProvider.defaults.headers.common["Content-Type"] = "application/json";
这段代码是错误的
<div ng-repeat="access in response" class="thumbnail">
<p>{{response.access_token}}</p>
<p>{{response.token_type}}</p>
<p>{{response.expires_in}}</p>
<p>{{response.refresh_token}}</p>
</div>
因为您要遍历数组 "response" 并且每次迭代都有一个 "access" 对象,所以在每个 'p' 元素中您必须使用 "access"不是 "response",像这样:
<div ng-repeat="access in response" class="thumbnail">
<p>{{access.access_token}}</p>
<p>{{access.token_type}}</p>
<p>{{access.expires_in}}</p>
<p>{{access.refresh_token}}</p>
</div>
否则,如果预期的数据不是数组,则不应使用 ng-repeat,而应使用响应对象
我从版本 V1.2 迁移到 V1.4 AngularJS 时遇到了同样的问题。在我的服务器 (JAX-RS) 中,我在注释中生成了 JSON 类型,并在响应中放入了一个字符串。我将 Produces(MediaType.APPLICATION_JSON) 更改为 Produces(MediaType.TEXT_PLAIN)。 AngularJS 想要 JSON 格式,但他收到了一个字符串。
html
<!doctype html>
<html lang="en" ng-app="phonecatApp">
<head>
<meta charset="utf-8">
<title>WrikeAPI</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script src="https://code.angularjs.org/1.4.0-beta.5/angular.js" data-semver="1.4.0-beta.5" data-require="angular.js@1.4.0-beta.5"></script>
<script data-require="angular-route@1.4.0-beta.5" data-semver="1.4.0-beta.5" src="https://code.angularjs.org/1.4.0-beta.5/angular-route.js"></script>
<script>
var wrikeApiControllers = angular.module('wrikeApiControllers', []);
var client_id = "";
var client_secret = "";
var grant_type = "";
var refresh_token = "";
wrikeApiControllers.controller('AccessToken', ['$scope', '$http',
function($scope, $http) {
$http.post('https://www.wrike.com/oauth2/token?client_id='+client_id+'&client_secret='+client_secret+'&grant_type='+ grant_type +'&refresh_token='+refresh_token).
success(function(data, status, headers, config) {
$scope.response = data;
}).
error(function(data, status, headers, config) {
});
}]);
var phonecatApp = angular.module('phonecatApp', [
'ngRoute',
'wrikeApiControllers'
]);
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/access', {
templateUrl: 'display-access-token.html',
controller: 'AccessToken'
}).
otherwise({
redirectTo: '/access'
});
}]);
</script>
</head>
<body>
<div ng-view></div>
</body>
</html>
这是我的显示访问权限-token.html
<ul >
<div ng-repeat="access in response" class="thumbnail">
<p>{{response.access_token}}</p>
<p>{{response.token_type}}</p>
<p>{{response.expires_in}}</p>
<p>{{response.refresh_token}}</p>
</div>
</ul>
当我使用我的网络浏览器或使用 Chrome 扩展邮递员访问 wrike 时,我在这样发帖后收到回复
{
"access_token": "UQldFEZJwifB3PEJWAsvasv3js1uoLk1GCq5ppMGgUijoz8gP46tBxeBd5ud51VGLFNlGjQw-N-N",
"token_type": "bearer",
"expires_in": 3599,
"refresh_token": "8yRHuuzeeEsqE4o0Y1lJe02uhqgGlalxnl798aksCzFn7WxjEtS4iveFhBjEG349w7pDFm3m1sY-A-N"
}
但是当我使用 AngularJS 时我无法得到响应 POST 是成功的但是我没有看到响应。我在网络浏览器中收到此消息 "Json.parse unexpected end of data at line 1 column 1 of the json data"
有什么帮助吗?谢谢
不知道有没有用,你试过启用cors吗?
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = false;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.defaults.headers.common["Accept"] = "application/json";
$httpProvider.defaults.headers.common["Content-Type"] = "application/json";
这段代码是错误的
<div ng-repeat="access in response" class="thumbnail">
<p>{{response.access_token}}</p>
<p>{{response.token_type}}</p>
<p>{{response.expires_in}}</p>
<p>{{response.refresh_token}}</p>
</div>
因为您要遍历数组 "response" 并且每次迭代都有一个 "access" 对象,所以在每个 'p' 元素中您必须使用 "access"不是 "response",像这样:
<div ng-repeat="access in response" class="thumbnail">
<p>{{access.access_token}}</p>
<p>{{access.token_type}}</p>
<p>{{access.expires_in}}</p>
<p>{{access.refresh_token}}</p>
</div>
否则,如果预期的数据不是数组,则不应使用 ng-repeat,而应使用响应对象
我从版本 V1.2 迁移到 V1.4 AngularJS 时遇到了同样的问题。在我的服务器 (JAX-RS) 中,我在注释中生成了 JSON 类型,并在响应中放入了一个字符串。我将 Produces(MediaType.APPLICATION_JSON) 更改为 Produces(MediaType.TEXT_PLAIN)。 AngularJS 想要 JSON 格式,但他收到了一个字符串。