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」屬性將是一個對象,而不是第一個例子中的字符串。 –