javascript - HTTP 请求负载中未定义的参数属性将被清除

标签 javascript http

我将 physicalserver_id 字段添加到我的参数对象 (params),然后发送 HTTP 请求:

var params =  this.entityServer
params.extra_desc = JSON.stringify(this.entityServer.extra_desc)
params.physicalserver_id = undefined

debugger // there I have checked the `params.physicalserver_id`

this.$http.post('/api/xxx/add/', params).then( (response) => {
    console.log(response, 'lml')
})

但是,我从后端收到错误,告诉我 physicalserver_id 字段是必需的。

在我的浏览器中,我检查请求负载:

enter image description here

发现没有physicalserver_id

如果我给出一个现有的号码:

params.physicalserver_id = 8

然后,问题就消失了。

enter image description here

<小时/>

EDIT-1

我的问题是,在我的参数中我给出了physicalserver_id=undefined,但是当我请求API时,请求负载不存在physicalserver_id,请参阅我的快照.

最佳答案

这是 JSON.stringify() 的行为。

当你调用 this.$http.post('/api/xxx/add/', params) 时,前端系统(我猜你使用的是 Angular)将转换 params 通过 JSON.stringify() 转换为字符串。由于 params 是一个对象,因此最终结果字符串中将省略所有具有未定义值的字段。因此,请求负载中将缺少 physicalserver_id 字段。

引用MDN详细说明:

If undefined, a Function, or a Symbol is encountered during conversion it is either omitted (when it is found in an object) or censored to null (when it is found in an array).

正如@HMR评论的那样,您需要向API提供商咨询“如何发送空的physicalserver_id”。

关于javascript - HTTP 请求负载中未定义的参数属性将被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50013765/

相关文章:

java - 如何初始化 char 数组以容纳 HTTP POST 内容长度

http - RESTful Web 服务能否从 SPDY 协议(protocol)中获益?

javascript - AngularJS 模板并使其更快?

javascript - 邮件监听器偶尔无法通过身份验证

Javascript 页面转换未定义

http - TCPCatcher : send HTTP request from hook

c++ - 如何在 Visual Studio 2010 中使用 cpp-netlib?

java - Android Http POST 请求不起作用

javascript - jQuery load() 函数不起作用

javascript - Ruby openssl 中的 AES 等价物?