我使用这些代码将数据发布到登录
postJson(url, data, callback){
var fetchOptions = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body:data
};
console.log('begin request');
fetch(url, fetchOptions)
.then((response) => {
responseJson = response.json()
console.log(responseJson, response.status)
callback(responseJson)
})
.catch((error) => {
console.error(error);
});
}
但是当我用它作为
时很奇怪postJson(url, formData, (responseJson) => {
if (responseJson == 200){
console.log(responseText)
this.onLoginSuccess();
}
else{
alert('fail');
}
})
响应代码始终为200,但登录失败。我用邮递员测试了api,它运行正常。
实际上console.log(responseJson,response.status)得到的是
Promise {
"_40": 0,
"_55": null,
"_65": 0,
"_72": null,
} 200
更新:此问题是由服务器端的基本身份验证引起的。只需添加编码即可解决此问题。感谢
答案 0 :(得分:2)
就像你的console.log输出所暗示的那样。 response.json
返回应该解决的承诺。您应该链接另一个.then
以解决承诺。
供参考https://developer.mozilla.org/en-US/docs/Web/API/Body/json
E.g:
...
.then((response) => response.json())
.then(json => callback(json))
希望它有所帮助。
答案 1 :(得分:1)
您正在将JSON与整数进行比较,因为您将在此处将其发送到回调:
responseJson = response.json()
console.log(responseJson, response.status)
callback(responseJson) //sending JSON not response.status
你需要这样的东西:
callback(responseJson,response.status)
并在您的通话功能中:
postJson(url, formData, (responseJson, status) => {
if (status== 200){
console.log(responseJson)
this.onLoginSuccess();
}
else{
alert('fail');
}
})