Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中循环开始之前,如何使函数运行并完成_Javascript_Html_Twitter Bootstrap - Fatal编程技术网

Javascript 在JS中循环开始之前,如何使函数运行并完成

Javascript 在JS中循环开始之前,如何使函数运行并完成,javascript,html,twitter-bootstrap,Javascript,Html,Twitter Bootstrap,我有一个自动通过HTML脚本运行的JS文件。我希望控制台在打印开始切换之前打印出更改为true的内容。这是因为我希望函数在加载之前调用API并更改toggle checked状态。我该怎么做 $(document).ready(function(){ for (var i=0;i<Object.keys(obj).length;i++) { var obj_name = Object.keys(obj)[i]; obj_id = "#"+obj_na

我有一个自动通过HTML脚本运行的JS文件。我希望控制台在打印开始切换之前打印出更改为true的内容。这是因为我希望函数在加载之前调用API并更改toggle checked状态。我该怎么做

$(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);
    });
}

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

$(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是异步的,这意味着对于外部请求或其他事件,代码永远不会停止。

您应该使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);
});

将循环放入一个额外的函数中,并在done中调用该函数