我正在使用 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}, function() {});
Angular 将忽略 content
并且不发送键或空值。
如何让 Angular 发送 null?
最佳答案
正如 Lèse 所指出的,javascript 类型 null
不是 URL 参数的有效值。
javascript null
值与字符串 'null'
不同。因此,如果您希望您的 URL 看起来像 /comments/123?content=null
,只需提供一个字符串 'null'
。 URL 参数不是 JSON,javascript 中的 null
值与 content=null
的含义不同,因为在后一种情况下,任何给定的服务器都会解释 null作为字符串值。
Angular 的 $http 服务 filters out null and undefined values in the params object before constructing a url with them因为没有标准化的方法将 undefined
作为“值”发送到服务器。它只是没有意义。但是,如果您想发送像 'undefined'
或 'null'
这样的字符串,那很好,但它需要在服务器端实现以这样解释它。
如果您正在发出 PUT
请求,为什么您的一些数据在资源中被 JSON 序列化,而另一些数据通过 URL 参数发送?也许示例代码的表现不佳,但在该示例中,您发送了一个 PUT
请求,其响应正文为 {"id": 123}
和 url /评论/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();
关于javascript - 在 ngResource AngularJS 中将 null 作为值发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315116/