问题描述
在我的网站上,我对azure函数使用了POST提取请求来存储一些数据。如果函数接收到所有数据,则根据接收到的数据量,将context.res.satus
设置为200,否则将其设置为400,并将context.res.body
设置为确认消息:
var returnMessage = mail ? "User entry successfully added to the database" : "Please enter a valid email";
returnMessage = phone ? returnMessage : "Please enter a valid phone number";
returnMessage = lName ? returnMessage : "Please provide your last name";
returnMessage = fName ? returnMessage : "Please procide your first name";
returnMessage = partKey ? returnMessage : "Something went wrong while generating a partition key";
context.res = {
status: (partKey && fName && lName && phone && mail) ? 200 : 400,body: returnMessage
};
因此,我在我的代码中调用fetch('URL',someStuff).then((res) => processResponse(res))
,并且res
总是返回绝对正确并传递给processResponse
,如下所示:
function processResponse(response) {
if (response.status === 200) {
var test = JSON.stringify(response.body);
document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">${test}</div>`;
}
}
如果函数接收到所有数据,则div元素“输出”将更新,如果未更新,则它不会更新,因此将response.status
与200的值进行比较显然是可行的。我原本认为将变量test
设置为response.body
即可使用,但这不起作用,而是将变量test
设置为单词“ Object”。我对JSON知之甚少,但显然我们可以使用JSON.stringify()
将对象转换为字符串,因此为什么test
现在是JSON.stringify(response.body)
,但这只是使test
的值相等到一组空的方括号。在我正在研究的教程中,他们说要使用response.json()
,就像这样:
function processResponse(response) {
if (response.status === 200) {
response.json()
.then(function(data) {
document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">${data.message}</div>`;
})
.catch(function(){
document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">"Caught"</div>`;
});
}
}
但是,每次我尝试response.json()
时,它都会失败,并且仅运行.catch()
部分。发生了什么,如何访问存储在response.body
中的字符串?
解决方法
如果格式不是json,则函数response.json()
返回错误。您可能没有在发布请求中设置Content-Type: application/json
标头! (有关更多信息,请参见HTTP Content-Type Header and JSON)