如何在JS中循环开始之前运行并完成一个函数

时间:2017-08-24 22:30:31

标签: javascript html twitter-bootstrap

我有一个自动运行HTML脚本的JS文件。我希望控制台打印出来"改为真"在打印出来之前"开始切换"。这是因为我希望函数调用API并更改切换"已检查"加载之前的状态。我该怎么做?

$(document).ready(function(){
    for (var i=0;i<Object.keys(obj).length;i++) {
        var obj_name = Object.keys(obj)[i];
        obj_id = "#"+obj_name;
        $(obj_id).bootstrapToggle();
        console.log("starting toggle")
    }
})
$("#samplekey").ready(function() {
    checkKey("#samplekey", power_toggles["samplekey"]);
})
function checkKey(obj_id, url1){
    var http_verb = "GET";
    $.ajax({
        url: url1,
        type: http_verb
    }).done(function(data) {
        if (data == 1234) {
            $(obj_id).prop("checked", true);
            console.log("changing to true")
        }
        else
        {
            $(obj_id).prop("checked", false);
        }
    }).fail(function(data,textStatus,errorThrown) {
            alert(errorThrown);
    });
}

2 个答案:

答案 0 :(得分:2)

您可以在代码中进行此更改:

$(document).ready(function() {
    checkKey("#someUrl", "someUrl")
})

function checkKey(obj_id, url1) {
    var http_verb = "GET";
    $.ajax({
        url: url1,
        type: http_verb
    }).done(function(data) {

        for (var i = 0; i < Object.keys(obj).length; i++) {
            var obj_name = Object.keys(obj)[i];
            obj_id = "#" + obj_name;
            $(obj_id).bootstrapToggle();
            console.log("starting toggle")
        }


        if (data == 1234) {
            $(obj_id).prop("checked", true);
            console.log("changing to true")
        } else {
            $(obj_id).prop("checked", false);
        }
    }).fail(function(data, textStatus, errorThrown) {
        alert(errorThrown);
    });
}

$("#samplekey").ready(function() {
    checkPOEPower("#samplekey", power_toggles["samplekey"]);
})

请记住,Javascript是异步的,这意味着代码永远不会停止外部请求或其他事件。

答案 1 :(得分:-1)

您应该使ajax请求同步。在代码中添加属性“async:false”

$.ajax({
    url: url1,
    type: http_verb,
    async: false
}).done(function(data) {
    if (data == 1234) {
        $(obj_id).prop("checked", true);
        console.log("changing to true")
    }
    else
    {
        $(obj_id).prop("checked", false);
    }
}).fail(function(data,textStatus,errorThrown) {
        alert(errorThrown);
});