JQuery/javascript选择框/映射延迟

JQuery/javascript选择框/映射延迟,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我用JQuery动态地创建了一个-tag。这些选项来自我通过几个ajax调用创建的映射。 当我第一次访问该页面时,它确实有一个select标记,但没有选项。但是,当我第二次访问该页面时,该页面具有选项。因此有一个延迟,但是当我在创建select标记的函数中放入一个console.log(map)时,它确实显示了所有选项 以下是我创建选择标记的代码: var namefield = $('<select></select>').attr("id","name");

我用JQuery动态地创建了一个-tag。这些选项来自我通过几个ajax调用创建的映射。 当我第一次访问该页面时,它确实有一个select标记,但没有选项。但是,当我第二次访问该页面时,该页面具有选项。因此有一个延迟,但是当我在创建select标记的函数中放入一个console.log(map)时,它确实显示了所有选项

以下是我创建选择标记的代码:

var namefield = $('<select></select>').attr("id","name");
    getmapofpeoplefromindex(index); // this creates the map with 3 AJAX-calls
    map.forEach(function(key,value){
        namefield.append($("<option>").attr('value',value).text(key));
    });
var namefield=$('').attr(“id”,“name”);
getmapofpeoplefromindex(索引);//这将通过3个AJAX调用创建映射
map.forEach(函数(键、值){
namefield.append($(“”).attr('value',value).text(key));
});

出了什么问题?我如何确保我有一个已填充的选择框?

我认为,您的getmapofpeoplefromindex(index)中存在问题;我看到了另一个问题映射。forEach(function(key,value)-这段代码应该看起来像map.forEach(function(value,key){})@SlawaEremkin getmapofpeopromfromindex(index)工作,映射函数也工作。因为第二次工作时…getmapofpeopromfromindex(index)执行一些Ajax调用,然后生成一个映射并将其存储在全局变量中。由于您的函数依赖于Ajax调用,这些请求的结果将仅异步可用,但您希望得到结果(即映射)同步到那里。显然不是这样。请看。@trincot第一条评论说不要使用async:false,但这对我来说很有效,我应该寻找其他东西还是保持这种方式?但是,感谢您对异步调用的深入了解,我不知道。
async:false
已被弃用,尽管有些浏览器可能仍然使用支持它,其他人会忽略它,因此您可能会误以为它可以工作,而事实上它只是忽略该设置并异步运行,这可以解释您的问题。还要注意,
console.log
在日志记录时不可靠,因为许多浏览器实现了
console.log
只保留对象引用,并在以后检索它(当内容可能同时加载到其中时)。