【问题标题】:ngResource: Send data in URL instead of bodyngResource:在 URL 中而不是正文中发送数据
【发布时间】:2014-09-09 04:01:43
【问题描述】:

我正在尝试以这种方式使用 ngResource 保存对象:

  var Tasks = $resource("http://example.com/task", {
    task: {
      id: '@id'
    }
  }, {
    'save': {
      method: 'POST',
      params: {
        key: "abc"
      }
    }
  });

  var task = new Tasks();
  task.id = "123";
  task.$save();

这正在生成这个 URL:

 http://example.com/task?task=%7B%22id%22:%22@id%22%7D&key=abc

为什么“@id”字符串没有被实际数据替换?为什么没有显示关键参数?

【问题讨论】:

  • 您的保存方法是“POST”。这就是为什么!顺便说一句,您应该使用 POST 在服务器上更改某些内容,而不是 GET。
  • 谢谢,但我不关注....我要改变什么来解决这个问题?我在这里写的代码是添加一个新任务,而不是得到一个。

标签: angularjs rest ngresource


【解决方案1】:

我强烈建议您修改 api 以不传递 json 字符串,但如果您必须这样做,您可以执行以下操作

var Tasks = $resource("http://example.com/task", {
  task: '@json'
}, {
  'save': {
    method: 'POST',
    params: {
      key: "abc"
    }
  }
});

var task = new Tasks();
task.id = '123';
task.json = angular.toJson(task);

【讨论】:

  • 我的 URL 现在包含这个:task?id=123&key=abc 这不是 API 想要的。 URL 必须包含一个“任务”参数,并且该参数包含一个 ID 参数。
  • @fstr 所以@ 助手只能工作一层。您必须手动进行编码。
  • 啊,很高兴知道。我可以手动完成的最干净的是什么?我可以继续为此使用 $resource 吗?
  • @fstr 我更新了我的答案,您可能需要使用以下内容。但是,如果可以的话,我会敦促您更改您的 api。
  • 好的,谢谢! :) 顺便说一句,更改 API 的理由是什么?他们是以非标准方式做的吗?
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多