SyntaxError:JSON.parse(<anonymous>)位置0的JSON中的意外标记R

时间:2016-11-29 10:39:06

标签: angularjs json

无法输入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>

1 个答案:

答案 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);
    });

现在,如果您打印修改后的响应,您可以看到数据属性已更改为我们返回的内容。

然后我们可以对该数据执行任何需要的操作。