1

我正在研究一个学习计划器,它从数据库中获取数据(语言键、任务、活动等)。因为我需要一个 JSON 字符串,所以我对其进行编码json_encode以便在 JavaScript 中使用它。我有一个不同的函数(用于键、任务、活动等),它获取这些数据并将其写入数组。

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

一切正常。我需要一些帮助,因为我现在必须在$(document).ready(). 我只想在功能get_tasks()完成后构建我的学习计划器(数组中充满了数据)。否则,我会得到错误。

如何解决?

这是我所拥有的$(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();
}
4

4 回答 4

2

您可以向函数添加回调:

function get_tasks(start_date, end_date, callback) {

然后在函数中填充数组后,调用回调函数:

if (callback) callback();

现在您可以使用回调参数来初始化学习计划器:

get_tasks(first_day, last_day, function() {
    init_learnplanner();
});
于 2010-12-07T09:15:05.023 回答
1

您应该能够在 中指定一个回调$.getJSON,该回调会在请求完成后立即执行。

编辑:你已经这样做了,但你为什么不从回调函数的末尾调用第二个代码块$.getJSON呢?

于 2010-12-07T09:09:07.930 回答
1

其他答案对我没有用,因为我有 5 个函数使用我的数据$.getJSON,我需要收集所有信息才能开始init_learnplanner()

经过几个小时的搜索,我发现了 jQuery 函数ajaxComplete,它对我来说就像一个魅力。jQuery 跟踪所有已触发的 ajax 调用,并在调用.ajaxComplete()完成时触发任何分配的内容。

于 2010-12-07T13:17:24.210 回答
0

我正在做的通常是这样的:简单,看起来像初学者但它有效:) :D

    <script type="text/javascript">
        var isBusy = true;
        $(document).ready(function () {
    // do your stuff here
            isBusy = false;
        });

        function exampleajax() {
            if(isBusy) return false;
            isBusy=true;
            $.ajax({
                async: true,
                type: 'POST',
                url: "???.asp",
                dataType: "jsonp",
                data: qs,
                error: function(xhr, ajaxOptions, thrownError){
                //console.log(xhr.responseText + " AJAX - error() " + xhr.statusText + " - " + thrownError);
                },
                beforeSend: function(){
                //console.log( "AJAX - beforeSend()" );
                },
                complete: function(){
                //console.log( "AJAX - complete()" );
    isBusy = false;
                },
                success: function(json){
                //console.log("json");
                }
            });
        }
</script>

希望这对你有帮助

于 2010-12-07T09:14:32.477 回答