javascript - 在 ngResource AngularJS 中将 null 作为值发送

标签 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() {});

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/

相关文章:

javascript - 通过 AJAX 调用获取 PHP 变量到 jquery 脚本文件

php - 使用 while 循环回显 mysql_fetch_row 超过 1 行?

android - cordova 相机插件获取所选图像的真实路径

Angularjs 在应用程序范围内处理 401 错误

javascript - Nodejs 启动一个新的调用堆栈

javascript - Vue.js 作为 ExpressJS View 引擎

javascript - 如何获取 Mongoose 模型中已填充 child 的数量?

javascript - 如何忽略引号内的标签? HTML,Javascript

javascript - 仅在调试时 undefined variable

javascript - 数据表刷新按钮和旋转很棒的图标