2012-08-29 49 views
0

這裏得到的結果從AJAX調用後調用等功能更是我的函數:只有在jQuery的

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

loadChildNodes($元素)功能使一個Ajax調用。我想等到這個函數完成後才執行後面的行。但是不會發生。我怎樣才能讓其他行只有在函數loadChildNodes完成後才能執行。

+0

你能發佈'loadChildNodes'函數嗎?它返回什麼? – fcalderan

+0

您可能必須使用回調,loadChildNodes($ element)'返回任何東西嗎?你可以發佈這種方法的代碼? – Vishal

回答

1

使用$.when().then()做的東西一旦AJAX完成,e.g:

$.when(loadChildNodes($('#budgetline' + id))).then(function() { 
    //stuff 
}); 
+0

然後我認爲你需要從'loadChildNodes'返回ajaxObject - 對吧? – andlrc

+0

沒錯,然後你可以執行附加到'ajaxObject'的任何成功處理程序。但要注意的是'success()'被棄用而不是'done()'請參閱http://api.jquery.com/jQuery.ajax/ – danwellman

1

介紹一個callback參數loadChildNodes並調用回調在方法內部Ajax調用成功回調。
現在重構代碼,其餘代碼行將移至回調並傳遞給loadChildNodes方法。

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

使用可用一個承諾由deferred objects

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

要正常工作loadChildNodes()應該返回一個promise(解決Ajax的成功回調,並拒絕對錯誤回調)或AJAX對象本身($.ajax或其他快捷方式,如$.get,$.post ...)

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 
    }); 
}