在ngResource AngularJS中将值作为值发送

我使用的是AngularJS 1.2.1的ngResource,我试图在PUT请求中的参数中发送null作为参数。 不幸的是,当它被设置时,Angular会忽略它的参数并且不会发送它。

以下是一些示例代码:

var User = $resource('/comments/:id', {id:'@id'}, {
  destroy: { method: 'PUT', params: {content: null} }
});
var user = User.destroy({id:123}, function() {});

Angular会改为忽略content ,不发送密钥或null值。

我如何让Angular发送null?


正如莱斯指出的那样,JavaScript类型的null对于URL参数来说不是有效的值。

javascript null值与字符串'null' 。 所以如果你想让你的URL看起来像/comments/123?content=null只需要提供一个字符串'null' 。 URL参数不是JSON,JavaScript中的null值与content=null因为在后一种情况下,null会被任何给定的服务器解释为字符串值。

Angular的$ http服务在使用它们构造url之前,在params对象中过滤掉null和undefined值,因为没有标准方式将undefined的值作为“值”发送到服务器。 这只是没有意义。 但是,如果你想发送一个像'undefined''null'这样的字符串,那很好,但它需要服务器端的实现来解释它。

如果您正在发出PUT请求,为什么有些数据在资源中被序列化为JSON,其中一些数据是通过URL参数发送的? 也许这个示例代码只是代表性很差,但在这个例子中,你发送了一个PUT请求,响应主体是{"id": 123}和url /comments/123 。 这不是多余的吗? 你为什么不把JSON字符串中的content属性和数据发送到服务器? 那么它实际上会有你正在寻找的null值,因为JSON字符串可以表示一个null类型值。 另外,如果您要删除/销毁记录,为什么不使用DELETE请求,而是使用PUT请求对销毁方法进行别名处理?

那么为什么不这样呢? 我不确定User需要怎么处理它...

var Comment = $resource('/comments/:id', {id: @id}, {
  destroy: {method: 'PUT'}
});
new Comment({id: 123, content: null}).$destroy();

自从我的问题以来所做的评论意味着不应该发送null因为它无法正确地封装在HTTP参数中。 但是,它可以封装在JSON中。 为什么会有人想发送一个空值? 因为将null发送给upsert [1]端点意味着销毁。 不幸的是,在.destroy()调用中没有办法将content的缺省值定义为null。

我解决的答案是:

var Comment = $resource('/comments/:id', {id:'@id'}, {
  destroy: { method: 'PUT' }
});
var comment = Comment.destroy({id:123, content: null});

这与@ jbielick的答案完全一样,他做了一个很好的工作,解释了为什么它不作为默认参数工作的原因,但是如果它作为JSONify的输入对象的一部分提供的话,它会工作。

  • Upsert是插入和更新单词的合并。
  • 链接地址: http://www.djcxy.com/p/19405.html

    上一篇: Send null as a value in ngResource AngularJS

    下一篇: Why use element[0] instead of element when creating AngularJS directive with d3?