javascript - 同步 JavaScript 函数

标签 javascript jquery html

如何使我的功能同步

$.getJSON(service_url + '?callback=?', params, function(response) {
    //console.log(response.result); 
    jsonGrpah = new Object();
    jsonGrpah.name = $("#label").val();
    jsonGrpah.children = new Array();
    for (var i = 0; i < response.result.album.length; i++)
    {
        jsonGrpah.children.push({"name": response.result.album[i]});
        jsonGrpah.children[i].children = new Array();
        var trackQuery = {"type": "/music/artist",
            "name": "The Police",
            "album": response.result.album[i],
            "track": []
        };
        var trackParams = {'key': API_KEY,
            'query': JSON.stringify(trackQuery)
        };
        $.getJSON(service_url + '?callback=?', trackParams, function(response) {
            for (var j = 0; j < response.result.track.length; j++)
            {
                jsonGrpah.children[i].children.push({"name": response.result.track[j]});
            }
        });
    }
    setGraph(jsonGrpah);
});

当我运行它时,setGraph(jsonGrpah);函数在第二个json之前运行, 有没有办法制作同步 JavaScript?

最佳答案

当所有对 getJSON 的调用完成后,您可以调用 setGraph(jsonGrpah),如下所示:

$.getJSON(service_url + '?callback=?', params, function(response) {
    ...

    var calls = [];

    for (var i = 0; i < response.result.album.length; i++)
    {
        ...

        calls.push($.getJSON(service_url + '?callback=?', trackParams, function(response) {
            ...
        }));

        $.when.apply($, calls).then(function() {
            setGraph(jsonGrpah);
        });
    }
});

关于javascript - 同步 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923924/

相关文章:

javascript - 使用 jQuery 捕获页面链接

javascript - 仅允许 Joi 模式中键的特定值

javascript - 如何在firefox控制台中获取被调用的javascript函数的名称

html - Imgs 不进入 div

javascript - HTML5 Canvas 闪烁文字?

javascript - 为 React 项目设置 webpack

javascript - 在不引起重定向的情况下向 URL 添加片段?

javascript - Jquery 如何在多选下拉列表中使用拆分

jquery - 在 jquery 中使用转义字符串作为 html 元素 ID

javascript - JavaScript 中的隔离执行上下文