0

これが私の関数です:

loadChildNodes($('#budgetline' + id));
$('.child-of-budgetline' + id).each(function(){
    $(this).expandTreeNode();
    console.log("test");
});

loadChildNodes($ element)関数はajax呼び出しを行います。この関数が完了するまで待ってから、その後の行だけを実行したいと思います。しかし、そうはなりません。関数loadChildNodesが完了した後にのみ、他の行を実行させるにはどうすればよいですか。

4

4 に答える 4

2

で利用可能な promise を使用しますdeferred objects

$.when(loadChildNodes($('#budgetline' + id))).done(function() {
    $('.child-of-budgetline' + id).each(function(){
       $(this).expandTreeNode();
       console.log("test");
    });
})
.fail(function() {
   /* some errors occured */
})

適切に動作するには、 (ajax 成功コールバックで解決し、エラー コールバックで拒否するため) または ajax オブジェクト自体 (または などの他のショートカット)loadChildNodes()を返す必要があります。promise$.ajax$.get$.post

于 2012-08-29T12:08:32.593 に答える
1

そのメソッド内の ajax 呼び出しの成功コールバックで、callbackパラメーターを導入してそのコールバックを呼び出します。 コードの残りの行が callback に移動され、loadChildNodes メソッドに渡されるように、コードをリファクタリングします。loadChildNodes

loadChildNodes($('#budgetline' + id), function() {
   $('.child-of-budgetline' + id).each(function(){     
     $(this).expandTreeNode();     
     console.log("test"); 
   }); 
}); 
于 2012-08-29T12:07:59.117 に答える
1

$.when().then()を使用 して、AJAX が完了したら処理を行います。

$.when(loadChildNodes($('#budgetline' + id))).then(function() { 
    //stuff 
});
于 2012-08-29T12:07:21.267 に答える
1

ajax 呼び出しをオブジェクトとして返す必要があります。

loadChildNodes($('#budgetline' + id)).done(function() {
    $('.child-of-budgetline' + id).each(function(){
        $(this).expandTreeNode();
        console.log("test");
    });
});

function loadChildNodes(elem) {
    return $.ajax({

       //do ajax
    });
}
于 2012-08-29T12:09:45.967 に答える