【发布时间】:2020-11-01 12:36:59
【问题描述】:
在我的网站上,我在 azure 函数上使用 fetch 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 将设置为单词“对象”。我对 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 中的字符串?
【问题讨论】:
-
我的回答有帮助,还是遇到了相同/新的问题?
标签: javascript json azure azure-functions