1
虽然从不同的地方看教程和代码示例,但我注意到有时在代码中,通过HTTP请求中的“数据”标头发送的JSON对象在发送之前会使用JSON.stringify(data)
进行处理,并且有时会在不被“串化“首先。当发送POST请求时,我应该何时JSON.stringify()它或不?
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":"[email protected]","Password":"Password1!","ConfirmPassword":"Password1!"}
但在这个
从.NET WEB API教程,客户端代码使用实例部分来自相同的客户端代码:
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"/>
我想这是因为JSON.stringify被调用,如果数据是一个对象,如果它的字符串,它只是直接发送 –
@MrZach从'var data'和'var loginData'判断,不是他们都JS变量? – CodeIntern
在第一个示例中,您将对象转换为字符串并将其设置为传递给ajax函数的对象的属性“数据”。 第二个例子是你没有将对象转换为字符串(通过JSON.stringify),所以对象的“data”属性将是一个对象,而不是第一个例子中的字符串。 –