Javascript 在JS中循环开始之前,如何使函数运行并完成
我有一个自动通过HTML脚本运行的JS文件。我希望控制台在打印开始切换之前打印出更改为true的内容。这是因为我希望函数在加载之前调用API并更改toggle checked状态。我该怎么做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
$(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中调用该函数