无法输入success()函数,而是在JSON.parse()'的位置0获取JSON中的“意外令牌R”的语法错误。 但是所有后台数据库操作都按照预期进行。
注意:我没有从AJAX调用中返回任何JSON数据
<html ng-app="PlaylistApp">
<head>
<meta charset="utf-8">
<title>Angular.js Example</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="lib/angular.min.js"></script>
<script>
var playlistApp = angular.module('PlaylistApp', []);
playlistApp.controller('PlaylistCtrl', function ($scope, $http)
{
$http({
method : 'GET',
url : 'http://localhost:8080/SignageSoC/api/playlist/all'
}).then(function success(response) {
$scope.playlists = response.data;
});
$scope.removePlaylist = function(index, playlistId)
{
var i = index;
alert(i);
alert(playlistId);
$http({
method : 'DELETE',
url : 'http://localhost:8080/SignageSoC/api/playlist/'+ playlistId
}).then(function success() {
alert(i);
$scope.playlists.splice(i, 1);
});
}
});
</script>
</head>
<body ng-controller="PlaylistCtrl">
<div>
<br>
<br>
<br>
<table class="center">
<tr>
<th>PlaylistId</th>
<th>Name</th>
<th>Total_duration</th>
<th>Play_continuous</th>
<th>Start_time</th>
<th>End_time</th>
<th>Update</th>
<th>Remove</th>
</tr>
<tr data-ng-repeat="(index,x) in playlists">
<td>{{x.playlistId}}</td>
<td>{{x.name}}</td>
<td>{{x.total_duration}}</td>
<td>{{x.play_continuous}}</td>
<td>{{x.start_time}}</td>
<td>{{x.end_time}}</td>
<td><button data-ng-click="updatePlaylist(index)">Update</button></td>
<td><button data-ng-click="removePlaylist(index, x.playlistId)">Delete</button></td>
</tr>
</table>
</div>
</body>
</html>
答案 0 :(得分:4)
事实证明我们可以避免这种异常。 来自角度ajax调用的任何响应都需要一个promise(将在内部解析为一个对象),并且将在该响应对象上自动调用JSON.parse。
如果我们没有返回任何JSON对象(在我的情况下是真的),那么angular会在JSON.parse()异常的位置0处的JSON中抛出意外的标记(任何字母)。
要使ajax调用接收除对象之外的任何数据,我们必须使用称为 transformResponse 属性的内置配置,并使解析器知道我们没有使用任何JSON数据。
为此,我使用以下方式
$http({
method : 'DELETE',
url : 'http://localhost:8080/SignageSoC/api/playlist/'+ playlistId,
transformResponse: function(response)
{
//alert("Success() starts here");
//alert(response);
return response;
}
}).then(function success(modResponse) {
alert(JSON.stringify(modResponse));
alert(JSON.stringify(modResponse.data));
//$scope.playlists.splice(index, 1);
});
现在,如果您打印修改后的响应,您可以看到数据属性已更改为我们返回的内容。
然后我们可以对该数据执行任何需要的操作。