无法读取AngularJS $资源DELETE的响应

时间:2014-05-20 00:20:48

标签: javascript angularjs rest crud angular-resource

我正在尝试使用AngularJS $资源从我的服务器中删除数据。但是,当我将结果写入控制台时,我看不到数据。

然而,当我去" Network"在Chrome的控制台中,我在名称路径左栏中看到了DELETE。当我点击"信息时,我会在右侧面板上看到五个标签。在预览和响应选项卡下,我看到了正确的数据。我只是不知道如何在我的Javascript中查看或检索它。

以下是javascript服务代码:

var MyServices = angular.module('MyServicesName', ['ngResource']);

MyServices.factory('AAAService', function($resource) {
    return $resource(serverBaseUrl + 'users/:userId/Video/:videoId/', {userId: '@userId', videoId: '@videoId'}, {
        show: {method: 'GET'},
        update: {method: 'PUT', params: {id: '@id'}},
        delete: {method: 'DELETE', isArray:false}
    });
});

和控制器:

quizcatControllers.controller('BBBCtrl', ['$scope', '$stateParams', '$http', 'AAAService',
    function($scope, $stateParams, $http, AAAService) {
$scope.deleteQuestion = function(user, videoId) {
             AAAService.delete({userId: user, videoId: videoId}, function(a, b) {
        console.log(a);//Expect to print the data
        console.log(b);
});

有人可以建议如何更改我的代码,以便我可以从响应中获取数据吗? 虽然我的响应数据不是数组格式,但我想知道如何为数组而不是数组样式执行此操作。

在下一行中应该使用专有名称而不是a和b:

  

AAAService.delete({userId:user,videoId:videoId},function(a,b){

更新

这是我在参数returnValue的成功回调中获得的结果:

  

0:" S"
     1:"你"
     2:" c"
     3:" e"
     4:" s"
     5:" s"
     $ promise:对象
  $ resolved:true
   proto :资源

1 个答案:

答案 0 :(得分:3)

使用资源可能有点令人困惑(至少它们最初适合我)。

我认为您的问题是,您对删除的调用并未使用正确的签名(对于' GET'方法和'非GET'方法有不同的签名。在这种情况下,看起来您正在发送作为回调函数的内容(成功和错误)作为postData。您使用的签名是用于' GET'方法(它没有POSTDATA)。

您的删除调用签名应如下所示(请参阅文档here):

  

Resource.action([parameters],postData,[success],[error])

所以,你可以这样做:

quizcatControllers.controller('BBBCtrl', ['$scope', '$stateParams', '$http', 'AAAService', 
function($scope, $stateParams, $http, AAAService) {
    $scope.deleteQuestion = function(user, videoId) {
        AAAService.delete(
            {userId: user, videoId: videoId},  // parameters
            {},                                // postData, which you don't need for this
            // success callback
            function (returnValue, responseHeaders) {
                // do what you want with the returnValue from the call here
            },
            // error callback
            function (httpResponse) {
                // do what you want for error handling here
            })
    };
}]);