AngularJS: PUT send data with URL but not as JSON data

[亡魂溺海] 提交于 2019-12-09 01:41:46

问题


Here is my UserService

angular.module('userServices', ['ngResource']).factory('User', function($resource) {
  return $resource('/users/:userId',
      // todo: default user for now, change it
      {userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810'},
      {update: {method: 'PUT', params:{profile: '@profile'}, isArray: false}}
  );
});

In my controller, I do

$scope.save = function() {
    $scope.user.$update({profile: $scope.profile});
}

But when I see the Network Tab in Chrome, I see

Request URL:http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810?profile=%5Bobject+Object%5D
Request Method:PUT
Status Code:200 OK

How can I send this as data payload? so that URL is

http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810

and data goes as

{
  day_in_month: 5
}

My endpoint expects the data to be part of request, so that it can parse it as request.json

Thank you


回答1:


@lucuma answer solved my problem.

I am sharing the code from my code base which worked after making changes as per @lucuma's suggestion (Thanks a lot @lucuma!)

The UserService looks like

angular.module('userServices', ['ngResource']).factory('User', function($resource) {
  return $resource('/users/:userId',
      // todo: default user for now, change it
      {userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810'},
      {update: {method: 'PUT', data:{}, isArray: false}} // add data instead of params
  );
});

and ProfileController looks like

function ProfileController($scope, User) {
    $scope.profile = {};
    $scope.user = User.get();
    $scope.save = function () {
        // I was using $scope.user.$update before which was wrong, use User.update()
        User.update($scope.profile,
            function (data) {
                $scope.user = data; // since backend send the updated user back
            });
    }

After making these changes, I my network tab in Chrome was as expected

Request URL:http://localhost:5000/users/bd675d42-aa9b-11e2-9d27-b88d1205c810
Request Method:PUT
Status Code:200 OK
Request Payload:
{"day_in_month":25}



回答2:


I would suggest you make the following change to your update declaration:

{update: {method: 'PUT', data:{profile:'@profile'}, isArray: false}}

Check out the network tab on this plunker. -v.1.1.5

Here is the same example on stable version 1.0.7.



来源:https://stackoverflow.com/questions/16781156/angularjs-put-send-data-with-url-but-not-as-json-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!