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でデータを使用する 5 つの関数があり、開始するためにすべての情報を収集する必要があるため、他の回答はうまくいきませんでしたinit_learnplanner()

数時間検索した後、私にとって魅力的なjQuery 関数ajaxCompleteを発見しました。jQuery は、起動されたすべての ajax 呼び出しを追跡し、.ajaxComplete()完了時に割り当てられたものをトリガーします。

于 2010-12-07T13:17:24.210 に答える
1

でコールバックを指定できるはずです$.getJSON。これは、リクエストが完了するとすぐに実行されます。

編集: 既にこれを行っていますが、コールバック関数の最後から 2 番目のコード ブロックを呼び出してみません$.getJSONか?

于 2010-12-07T09:09:07.930 に答える
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 に答える