在查看来自不同地方的教程和代码示例时,我注意到有时在代码中JSON对象通过"数据" HTTP请求中的标头在发送之前使用JSON.stringify(data)
进行处理,有时它们会发送它而不会被"字符串化"第一。
使用.NET WEB API教程中的示例,客户端代码:
var data = {
Email: self.registerEmail(),
Password: self.registerPassword(),
ConfirmPassword: self.registerPassword2()
};
$.ajax({
type: 'POST',
url: '/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data)
}).done(function (data) {
self.result("Done!");
}).fail(showError);
在此示例中,如果我理解正确,则会将data
转换为以下内容:
{"Email":"alice@example.com","Password":"Password1!","ConfirmPassword":"Password1!"}
但是在这部分来自相同的客户端代码:
var loginData = {
grant_type: 'password',
username: self.loginEmail(),
password: self.loginPassword()
};
$.ajax({
type: 'POST',
url: '/Token',
data: loginData
}).done(function (data) {
self.user(data.userName);
// Cache the access token in session storage.
sessionStorage.setItem(tokenKey, data.access_token);
}).fail(showError);
未使用JSON.stringify()。有什么区别?如果我理解正确,HTTP请求是基于文本的,因此我习惯将所有请求字符串化。
编辑:
这些是使用KnockoutJS的数据绑定元素:
//...Other HTML markups...
<input class="form-control" type="text" data-bind="value: registerEmail"/>
//...Other HTML markups...
<input class="form-control" type="password" data-bind="value: registerPassword"/>
//...Other HTML markups...
<input class="form-control" type="password" data-bind="value: registerPassword2" />
//...Other HTML markups...
<input class="form-control" type="text" data-bind="value: loginEmail"/>
//...Other HTML markups...
<input class="form-control" type="password" data-bind="value: loginPassword"/>
答案 0 :(得分:0)
两种方式都可以将数据发送到后端。如果发送字符串数据,则需要在后端进行解析。即使您发送数据,如Array或Object,您也可以直接分配给任何变量。
答案 1 :(得分:0)
如果您通过 post 请求发送的对象没有嵌套对象,则发送数据而不将其转换为字符串是安全的。
否则,如果您的负载(数据)是这样的:
var data={
Email:"username",
Password:"password",
extraOptions:{
option1: { Verified:true },
option2: { empty:false }
}
};
然后“JSON.stringify()”它。或者您的请求正文 JSON 将如下所示。
{
Email:"username",
Password:"password",
extraOptions[option1][Verified]:true,
extraOptions[option2][empty]:false
}
并将数据发送为:
$.ajax({
type: 'POST',
url: '/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: {data:JSON.stringify(data)}
}).done(function (data) {
self.result("Done!");
}).fail(showError);
所以在你的后端“req.body.data”是你的字符串。
var json=JSON.parse(req.body.data)