JavaScript - AJAX 等待 Return 来自 PHP 的值
JavaScript - AJAX wait for Return Value from PHP
我是 AJAX 的新手。我的目标是在 JavaScript 中打开一个 php 文件。
function checkCorrect(userEntry, solution) {
return fetch("checkSolution.php", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: `userEntry=${userEntry}&solution=${solution}`,
})
.then((response) => response.text())
.then((res) => (res))
.catch(err => console.log("checkCorrect: " + err));
}
function checkSolution() {
result = checkCorrect(userEntry, solution);
alert(result)
}
我的问题是,checkSolution 中的 alert() 显示“[object Promise]”
而不是来自 php 的实际价值。在 php 中只有一个
echo "hi";
谢谢,
大马
其实fetch是异步的。我不知道。
就我而言,我正在寻找同步方法。
XMLHttpRequest 对我来说是正确的方法。
解决方法如下:
function checkCorrect(userEntry, solution) {
var ret_value = null;
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
ret_value = xmlhttp.responseText;
}
}
xmlhttp.open("POST","checkSolution.php",false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("userEntry="+userEntry+"&solution="+solution);
return ret_value;
}
xmlhttp.open()的第三个参数是重要的部分:
如果 true = 异步,如果 false = 同步
谢谢,BM
你需要在 function 声明之前使用 async 以便 JS 知道这是一个异步函数,你还需要使用 await 等待承诺解决。这是一个例子:
function async checkCorrect(userEntry, solution) {
try {
const requestParams = {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: `userEntry=${userEntry}&solution=${solution}`,
}
const result = await fetch("checkSolution.php", requestParams)
.then((response) => response.text())
.then((res) => (res))
return result;
} catch(e) {
handleYourError(e);
}
}
function checkSolution() {
result = checkCorrect(userEntry, solution);
alert(result)
}
我是 AJAX 的新手。我的目标是在 JavaScript 中打开一个 php 文件。
function checkCorrect(userEntry, solution) {
return fetch("checkSolution.php", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: `userEntry=${userEntry}&solution=${solution}`,
})
.then((response) => response.text())
.then((res) => (res))
.catch(err => console.log("checkCorrect: " + err));
}
function checkSolution() {
result = checkCorrect(userEntry, solution);
alert(result)
}
我的问题是,checkSolution 中的 alert() 显示“[object Promise]”
而不是来自 php 的实际价值。在 php 中只有一个
echo "hi";
谢谢, 大马
其实fetch是异步的。我不知道。 就我而言,我正在寻找同步方法。
XMLHttpRequest 对我来说是正确的方法。
解决方法如下:
function checkCorrect(userEntry, solution) {
var ret_value = null;
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
ret_value = xmlhttp.responseText;
}
}
xmlhttp.open("POST","checkSolution.php",false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("userEntry="+userEntry+"&solution="+solution);
return ret_value;
}
xmlhttp.open()的第三个参数是重要的部分:
如果 true = 异步,如果 false = 同步
谢谢,BM
你需要在 function 声明之前使用 async 以便 JS 知道这是一个异步函数,你还需要使用 await 等待承诺解决。这是一个例子:
function async checkCorrect(userEntry, solution) {
try {
const requestParams = {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: `userEntry=${userEntry}&solution=${solution}`,
}
const result = await fetch("checkSolution.php", requestParams)
.then((response) => response.text())
.then((res) => (res))
return result;
} catch(e) {
handleYourError(e);
}
}
function checkSolution() {
result = checkCorrect(userEntry, solution);
alert(result)
}