这里我编写了简单的代码,用于将数据保存到api,当我用户data: $httpParamSerializerJQLike(savingdata)
将数据绑定到服务器端但是当我使用data: JSON.stringify(savingdata)
时它在服务器端没有绑定是什么原因
this.saveEmp = function (savingdata) {
var sersave = $http({
url: Privateurl2 + 'SaveEmpData',
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded ;charset=utf-8'
},
// data: $httpParamSerializerJQLike(savingdata),
data: JSON.stringify(savingdata),
})
return sersave;
}
答案 0 :(得分:2)
你问
$ httpParamSerializerJQLike和json.stringify
之间的区别是什么
答案很简单。前者以 form-url-encoded 格式生成字符串,后者 JSON 。为了说明......
const savingdata = {
foo: 'abc',
bar: 123,
baz: ['A', 'B']
}
$httpParamSerializerJQLike(savingdata)
// <- foo=abc&bar=123&baz%5B%5D=A&baz%5B%5D=B
JSON.stringify(savingdata)
// <- {"foo":"abc","bar":123,"baz":["A","B"]}
至于为什么一个人在服务器上工作而另一个人没有;您正在将请求Content-type
设置为application/x-www-form-urlencoded
。如果您尝试发送JSON格式的请求正文,则服务器将无法对其进行解码,因为它与您指定的格式不匹配。
您的服务器可能能够处理JSON请求有效负载(如果已经编码/配置为这样做),在这种情况下您只需使用AngularJS默认值并使用
return $http.post(Privateurl2 + 'SaveEmpData', savingdata)
这会将Content-type
设置为application/json
,并使用JSON.stringify
来序列化请求的有效负载。
如果您的服务器未设置为以此格式处理请求,则操作显然会失败。