1

嘿,我正在开发一个 jQuery each()-loop,其中包含一个 ajax 请求和一个 setTimeout。这给我的程序流程带来了一些问题。

xml_queries: function (data) {
    var values = [];

    // ...

    $.each(data, function(index, value) {

        // ...

        // Start xml query
        var i = 0;
        get_data(value.value);

        function get_data(value) {
            $.ajax({
                type: 'POST',
                url: '/admin/scanner/get_music_data/' + value,
                dataTaype: 'json',
                success: function(response) {
                    if ( response === 'FALSE' ) {
                        // Start recursion - up to 3 Retries
                        if ( ++i <= 3 ) {
                            setTimeout(function() {
                                get_data();
                            }, 100);
                        } else {
                            // ...
                        }
                    } else {
                        values.push(response);
                    }
                }
            });
        }
    });
    // return values;
    console.log(values);
}

我的问题是最后一行中的 console.log() 立即被触发(而循环仍在处理数据)。等待循环完成是否有任何简单的可能性?\:

最好的祝福!

4

1 回答 1

1

根据您当前的代码,最直接的方法是将 $.ajax 的async选项设置为 false,以强制同步请求,导致 JavaScript 在继续执行后续语句之前等待它完成(它不会这样做异步请求)。

$.ajax(
   {
    type: 'POST',
    async: false,
    ...

这将在每个请求期间阻止您的浏览器(恶心)。另一种方法是重新设计您的应用程序,以便从第一个成功回调中调用下一个 ajax 调用,例如:

$.ajax(
   {
    type: 'POST',
    ...
    success: function() {
        doAjaxThingie();
    }
于 2010-11-23T00:56:52.567 回答