javascript - 重复函数直到为真

标签 javascript

我正在尝试调用一个 ajax 请求,直到它返回一个真值。我尝试了以下代码,但它没有返回任何结果,也没有在控制台中出现错误。知道我做错了什么吗?

function getUserData() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    var resp = JSON.parse(xhr.responseText);
    return resp.status;
  }
}
xhr.send();
}

setInterval(function () {
if (getUserData() === "true") {
   alert("true");
}
}, 10000);

最佳答案

getUserData 在内部调用一个异步函数,因此它在 AJAX 调用实际完成之前很久就返回了。

与其在 setInterval 循环中执行此操作,不如在失败情况下再次尝试调用 getUserData。例如:

function getUserData() {
    var xhr = new XMLHttpRequest();

    xhr.open("GET", "http://api.example.com/data.json", true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            var resp = JSON.parse(xhr.responseText);
            if (resp.status) {
                alert("true");
            } else {
                setTimeout(getUserData, 10000);
            }
        }
    }
    xhr.send();
}

getUserData();

关于javascript - 重复函数直到为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466693/

相关文章:

javascript - 是否可以仅通过 CSS 更改页面加载时特定元素的背景?

javascript - Bootstrap 模态体 : Json Refresh After Upload Codeigniter

javascript - 提交多个选定的行 Jquery 数据表

javascript - 需要多长时间才会触发点击事件?

javascript - 如何在javascript中设置颜色过渡?

javascript - jquery 与 .html() 类似,但不删除事件监听器

javascript - 然后返回 Promise 内的 Promise 链

javascript - 初始化/onInit 函数后 Angular 属性变得未定义

javascript - node.js connect-auth 应用程序?示例(用户注册/用户/ session 管理)

javascript - 为什么我的事件处理程序与 jQuery 绑定(bind)不触发?