在查看来自不同地方的教程和代码示例时,我注意到有时在发送HTTP请求中通过"data"头部发送的JSON对象会在发送之前进行JSON.stringify(data)
处理,而有时它们在发送之前不被“stringified”。
使用.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"/>
var data
和var loginData
来看,它们都是 JavaScript 变量,对吗? - CodeIntern