提问人:butterfly 提问时间:11/24/2021 最后编辑:butterfly 更新时间:11/24/2021 访问量:56
根据 XML HTTP 请求状态为另一个函数指定布尔值
give another function a boolean value depending on the xml http request status
问:
类似问题
我已经尝试将类似的问题应用于我的案例,但没有得出这个问题的结论。 但是,如果您有类似的问题,这些可能值得研究:
上下文
我有一个包含三个输入(名称、密码、确认密码)的表单,我想使用 Javascript 验证某些条件(例如密码的最小长度等)。因此,我创建了函数validateForm()来执行此操作。
一个标准是用户名不应该已经存在。因此,我创建了函数 userExists()(见下文),该函数由 validateForm() 调用。userExists() 本身工作正常,因为它在控制台中正确记录“存在”或“不存在”。
问题
但是,我很难在函数 validateForm() 中使用函数 userExists() 获得布尔值 (true/false)。
我发现了两个使这变得困难的问题:
- 从 onreadystatechange 属性中获取值
- 异步函数:使 validateForm() 等待 userExists() 完成然后再继续(我试图通过回调解决)
问题
如果用户已经存在,从 userExists() 到 validateForm(),我如何获取信息?
我是 Javascript 的新手(有点不知所措),并且已经在这个问题上坐了两天了。我不确定是否存在结构问题,或者只是一点语法错误。我不知道如何解决这个问题,如果能得到一些帮助,我将不胜感激。
法典
var val;
var exists;
var performSomeAction = function (exists) {
val = exists;
}
function validateForm() {
const name = document.getElementById("username").value;
//checking some inputs
//check if the username is already in use
console.log(nameExists);
else if (nameExists) {
alert("The name is already in use");
name = "";
return false;
}
//validating more inputs
}
function userExists(callback) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 204) {
console.log("Exists");
callback(true);
} else if (xmlhttp.readyState == 4 && xmlhttp.status == 404) {
console.log("Does not exist");
callback(false);
}
};
xmlhttp.open("GET", "#aLinkThatIsNotTheIssue", true);
xmlhttp.send("");
}
结果
控制台中的当前输出为:
undefined
Exists
答: 暂无答案
评论
returned_data
exists
val
returned_data
console.log()