How to check if javascript function is ready/done (jQuery)

Chris picture Chris · Dec 7, 2010 · Viewed 16.3k times · Source

I am working on a learning planner which gets its data (languagekeys, tasks, activities, etc.) from a database. Because I need a JSON string, I encode it with json_encode to work with it in JavaScript. I have a different function (for keys, tasks, activities, etc.) which gets this data and writes it into an array.

function get_tasks(start_date,end_date){

    maxsubtasks=0;
    maxtasks=0;

    $.getJSON(json_data+"?t_startdate="+start_date+"&t_enddate="+end_date, function(data) {  

        tasks=new Array();

        $.each(data.tasks, function(i,item){

            tasks[i]= new Object();
            tasks[i]["t_id"]=item.t_id;
            tasks[i]["t_title"]=item.t_title;
            tasks[i]["t_content"]=item.t_content;
            . . .

            if ( i > data.tasks.length) return false;    
            maxtasks = data.tasks.length;
            if(item.t_parent > 0){
                maxsubtasks++;
            }
        });         
    });
    return true;
}

Everything is working just fine. I need some help, because I now have to call this function in $(document).ready(). I want to build my learning planner only once the function get_tasks() is complete (the array is filled with data). Otherwise, I will get errors.

How can this be solved?

Here is what I have in $(document).ready():

if(get_tasks(first_day,last_day) && get_tmp_data()){ // If this function is done
    // This function should be fired -- just like a callback in jQuery
    init_learnplanner();
}

Answer

Guffa picture Guffa · Dec 7, 2010

You can add a callback to the function:

function get_tasks(start_date, end_date, callback) {

Then after populating the array in the function, call the callback function:

if (callback) callback();

Now you can use the callback parameter to initialise the learning planner:

get_tasks(first_day, last_day, function() {
    init_learnplanner();
});