Javascript 将null作为ngResource AngularJS中的值发送
我正在使用AngularJS 1.2.1的ngResource,并尝试将Javascript 将null作为ngResource AngularJS中的值发送,javascript,ajax,angularjs,angularjs-resource,Javascript,Ajax,Angularjs,Angularjs Resource,我正在使用AngularJS 1.2.1的ngResource,并尝试将null作为PUT请求中参数的值发送。不幸的是,当它被设置时,Angular将忽略它作为参数而不发送它 下面是一些示例代码: var User = $resource('/comments/:id', {id:'@id'}, { destroy: { method: 'PUT', params: {content: null} } }); var user = User.destroy({id:123}, functio
null
作为PUT请求中参数的值发送。不幸的是,当它被设置时,Angular将忽略它作为参数而不发送它
下面是一些示例代码:
var User = $resource('/comments/:id', {id:'@id'}, {
destroy: { method: 'PUT', params: {content: null} }
});
var user = User.destroy({id:123}, function() {});
Angular将忽略内容
,不发送键或空值
如何使Angular send为null?正如Lèse所指出的,javascript类型
null
不是URL参数的有效值
javascriptnull
值与字符串'null'
不同。因此,如果您希望您的URL看起来像/comments/123?content=null
,只需提供一个字符串'null'
。URL参数不是JSON,javascript中的null
值与content=null
的含义不同,因为在后一种情况下,任何给定的服务器都会将null解释为字符串值
Angular的$http服务是因为没有标准化的方法将未定义的
作为“值”发送到服务器。这根本没有道理。但是,如果您想发送一个字符串,如'undefined'
或'null'
,这很好,但它需要在服务器端实现来解释它
如果您正在发出一个PUT
请求,为什么您的一些数据在资源中被JSON序列化,而一些数据通过URL参数发送?可能示例代码表示得不好,但在该示例中,您发送了一个PUT
请求,响应主体为{“id”:123}
,url为/comments/123
。这不是多余的吗?为什么不将JSON字符串中的内容属性和数据发送到服务器?然后它实际上会有您正在寻找的null
值,因为JSON字符串可以表示null
类型值。另外,如果要删除/销毁记录,为什么不使用DELETE
请求,而是将销毁方法与PUT请求混在一起
那么为什么不做这样的事情呢?我不确定用户
与此有什么关系
var Comment = $resource('/comments/:id', {id: @id}, {
destroy: {method: 'PUT'}
});
new Comment({id: 123, content: null}).$destroy();
自从我提出问题以来所做的评论意味着不应该发送null
,因为它不能正确地封装在HTTP参数中。但是,它可以封装在JSON中。为什么有人要发送空值?因为将null发送到一个upsert
[1]端点意味着销毁。不幸的是,无法在.destroy()
调用中将内容的默认值定义为null
我接受的答案是:
var Comment = $resource('/comments/:id', {id:'@id'}, {
destroy: { method: 'PUT' }
});
var comment = Comment.destroy({id:123, content: null});
这与@jbielick的答案完全相同,他很好地解释了为什么它不能作为默认参数工作,但如果它作为输入对象的一部分提供给JSONify,它就可以工作
Upsert是单词insert和update的合并
你为什么要发送null?所有参数值都以字符串形式发送,因此Angular无论如何都无法发送。我之所以发送null,是因为我的API有一个upsert端点,所以发送content:null应该会破坏它。在权衡方面有各种原因,这意味着upsert提供了一个更干净的API,而不是DESTROY
请求。