【问题标题】:AngularJS 1.2.0 $resource PUT/POST/DELETE do not send whole objectAngularJS 1.2.0 $resource PUT/POST/DELETE 不发送整个对象
【发布时间】:2013-11-07 04:31:37
【问题描述】:

我正在使用带有 $resource 的 angularjs 1.2.0。我想要一些 PUT/POST 实例操作,它们不会将整个对象发送到服务器,而只会发送一些字段,在某些情况下完全没有数据。

有可能吗?我到处搜索,但找不到任何东西

更新:

DELETE 请求也会发生这种情况:

鉴于此代码:

group.$deleteChatMessage({messageId: message.id}, function(){
    var i = _.indexOf(group.chat, message);
    if(i !== -1) group.chat.splice(i, 1);
});

请求是这样的:

查看整个模型的发送方式(在“请求有效负载”下)。

这是资源:

    var Group = $resource(API_URL + '/api/v1/groups/:gid',
      {gid:'@_id', messageId: '@_messageId'},
      {
        deleteChatMessage: {method: "DELETE", url: API_URL + '/api/v1/groups/:gid/chat/:messageId'},
      });

【问题讨论】:

    标签: javascript angularjs xmlhttprequest


    【解决方案1】:

    这对我有用:

    $resource(SERVER_URL + 'profile.json',
    {},
    {
        changePassword :
        {
            method : 'POST',
            url : SERVER_URL + 'profile/changePassword.json',
    
            // Don't sent request body
            transformRequest : function(data, headersGetter)
            {
                return '';
            }
        }
    });
    

    您可以通过在 transformRequest 函数中实现您自己的代码来自定义发送到服务器的确切内容。在我的示例中,我向 REST 客户端添加了一个新函数,但您也可以覆盖现有函数。请注意,“transformRequest”仅在 1.1+ 版本中可用

    【讨论】:

      【解决方案2】:

      您可以专门为此使用 $http。但是,我有一个案例用于可能有帮助的项目。另外,我的示例是从服务器返回一个数组,但您可以更改它。

      为我服务:

      app.factory('mySearch', ['$resource', function($resource) {
          return $resource('/api/items/:action', {}, {
              search: { method: 'POST', isArray: true,
                  params: { action: 'search' }
              }
          });
      }
      ]);
      

      在我的控制器中:

      我可以构建自定义参数以发布到服务器,或者如果我只需要用户选择的表格行中的两个字段。

              var one = "field_one";
              var two =  "field_two";
              $scope.search({one: one, two: two});
      

      然后我可以通过事件发布这些并传递自定义参数

          $scope.search = function(customParams) {
          mySearch.search({query: customParams}, function(data) {
              $scope.items = data;
      
          }, function(response) {
              console.log("Error: " + response.status);
          })
      };
      

      希望这能有所帮助。让我知道这是否接近您的要求,我可以提供更多帮助。

      发布

      删除

      【讨论】:

      • 但是这种方式参数是在 url 中传递的,但主要是我不希望任何参数或仅我指定的参数在请求正文中而不是在 url 中发送
      • 嗯。好吧,如果我 console.log(customParams) 我指定它的唯一字段。如果我告诉它,我只能发布一个字段。我正在使用 Rails 执行此操作,因此我的路线正在执行由字段指定的自定义搜索,我需要将其保存以用于其他目的。对不起,我有点累了,也快要睡觉了。今天晚些时候再试一次。幸运。
      • 尝试从 Rails 记录它在请求正文中从浏览器获取的内容
      • 我实际上发送了 4 个特定字段,即原点、半径、目的地和半径。 pastebin.com/ayxNzH05
      • 如果您使用的是 Rails,请尝试这篇博文。在底部,作者也以 $resource 为例。不过,我很难阅读咖啡脚本.. bit.ly/18sHOWi
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2013-09-04
      • 2015-10-07
      • 2014-03-14
      相关资源
      最近更新 更多