Hen*_*jie 8 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}, function() {});
Run Code Online (Sandbox Code Playgroud)
Angular将忽略content而不发送密钥和null值.
如何让Angular发送null?
正如 L\xc3\xa8se 所指出的,javascript 类型null不是 URL 参数的有效值。
JavaScriptnull值与字符串不同\'null\'。因此,如果您希望 URL 看起来像这样,/comments/123?content=null只需提供一个字符串即可\'null\'。URL 参数不是 JSON,并且nulljavascript 中的值并不具有相同的含义,content=null因为在后一种情况下,null 会被任何给定服务器解释为字符串值。
Angular 的 $http 服务会在使用 params 对象构造 url 之前过滤掉 params 对象中的 null 和未定义值,因为没有标准化的方法将其undefined作为“值”发送到服务器。这根本没有意义。但是,如果您想发送类似\'undefined\'或 的字符串\'null\',那很好,但需要在服务器端实现才能将其解释为这样。
如果您正在发出请求PUT,为什么有些数据在资源中以 JSON 序列化,而有些数据则通过 URL 参数发送?也许示例代码的表现很差,但在该示例中,您正在发送PUT带有响应正文{"id": 123}和 url的请求/comments/123。这不是多余的吗?为什么不将contentJSON 字符串中的属性和数据发送到服务器?那么它实际上就会具有null您正在寻找的值,因为 JSON 字符串可以表示null类型值。另外,如果您要删除/销毁记录,为什么不使用请求DELETE,而是使用 PUT 请求作为销毁方法的别名?
那么为什么不做这样的事情呢?我不确定User这有什么关系......
var Comment = $resource(\'/comments/:id\', {id: @id}, {\n destroy: {method: \'PUT\'}\n});\nnew Comment({id: 123, content: null}).$destroy();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |