0

一定量のページを繰り返し処理し、ajax 呼び出しを使用してコンテンツを入力したいと思います。問題は、反復関数内に ajax 呼び出しを配置すると、javascript の同期の性質に問題があることです。ajax 呼び出しが完了する前に、反復が既に続行されています。そこで、setTimeout で ajax 呼び出しを行う回避策を作成しました。これは正常に機能します。しかし、私はこの方法があまり好きではなく、別の (より良い) 解決策があるかどうか疑問に思っていました。(jQuery が async: true オプションを提供していることは知っていますが、それは機能しませんでした)

function populatePages(i) {
    pageId = PageIds[i];
    containerId = pageIdContainer[i];
    $j.ajax({
        type: 'GET',
        dataType: 'html',
        url: url,
        data: { pageid: pageId, containerid: containerId },
        success: function(data) {
           //populate the DIV
        }
    });
} 


i = 0;
x = 50;
$j.each(pagesIds, function(){  
    setTimeout("populatePages("+i+")", x);
    x = x + 50;
    i++;  
});    
4

1 に答える 1

0

これを試してください(テストされていません)

function populatePages(i) {
    console.log('populatePages', i)
    pageId = PageIds[i];
    return $.ajax({
        type: 'GET',
        dataType: 'html',
        url: '/echo/html',
        data: { pageid: pageId},
        success: function(data) {
        }
    });
} 


function messy(index){
    console.log('messy', index)
    if(index >= PageIds.length){
        return;
    }

    populatePages(index).always(function(){
        console.log('complete', index)
        setTimeout(function(){
            messy(index + 1)
        });//to prevent possible stackoverflow
    })
}

PoC:フィドル

于 2013-05-13T10:36:34.247 に答える