我想在POST请求中发布数据。我有一个看起来像这样的登录表单
render(){
return (
<div className="LoginPage">
<div className="login-page">
<div className="form">
<form className="login-form">
<input id="username" type="username" placeholder="username"/>
<input id="password" type="password" placeholder="password"/>
<p className="message">Not registered? <a href="#">Request Username and Password</a></p>
</form>
<button onClick={this.handleLoginButtonClick.bind(this)}>login</button>
</div>
</div>
</div>
);
}
我在handleLoginButtonClick
中发出POST请求handleLoginButtonClick() {
let token;
var settings = {
"async": true,
"crossDomain": true,
"url": "https://trigger-backend.appspot.com/auth/login/",
"method": "POST",
"credentials": 'include',
"headers": {
"content-type": "application/x-www-form-urlencoded",
},
"data": {
"password": JSON.stringify(document.getElementById("password").value),
"username": JSON.stringify(document.getElementById("username").value)
},
success: function( data, textStatus, jQxhr ){
// alert("success");
},
}
$.ajax(settings).done((response) => {
token = JSON.stringify(response.auth_token)
this.context.router.push('/app')
});
所以我目前正在包含这样的数据
"data": {
"password": JSON.stringify(document.getElementById("password").value),
"username": JSON.stringify(document.getElementById("username").value)
}
但是api给了我400这样的错误
但与此同时,如果我传递这样的数据,那么它可以正常工作
"data": {
"password": "apurv",
"username": "Apurv"
},
这里有什么问题。两者都应该相同,对吗?
答案 0 :(得分:6)
您应该删除JSON.stringify
这里的"data": {
"password": document.getElementById("password").value,
"username": document.getElementById("username").value
}
次来电,因为他们会在值周围添加不必要的双引号,使其无效:
apurv
因此,您不会发送值"apurv"
作为密码,而是发送CAST(Column AS TIMESTAMP(0))
密码不正确的密码。
答案 1 :(得分:1)
&#34; getElementById()。value&#34;的返回值是字符串, 但是&#34; JSON.stringify()&#34;用于将对象转换为字符串。 这意味着您正在尝试将字符串转换为字符串。 这就是错误发生的原因。