1

ロードされたときに ajax リクエストを行い、バックエンドから JSON [] 形式のデータを取得してページに表示する Web ページがあります。Web ページは MVC .NET で生成されます

バックエンドからイベントをロードする関数:

function initEvents() {
    $.ajax({
        url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json',
        success: function (data) {
            events = data;
        },
        error: function(data) {
            //  Note: hardcoded JSON event in here
            events = hardcodedEvents;
        },
        complete: function(data) {
            // Add events
            for (var i = 0; i < events.length; i++){
                addEvent(events[i]);
            }
        }
    });
}

リクエストが失敗すると (つまり、偽のデータを指すように URL を変更すると) error: function(data)、ハードコードされた JSON オブジェクトが正常に読み込まれ、'complete: function(data)' に入り、イベントが 1 つずつ追加されます。

ただし、正しい URL を使用してバックエンドからイベントを取得すると、イベントの到着が遅すぎるようです。completeセクションを出るときと同じように。問題は、なぜこれが起こっているのかということです。complete返信が返ってくるたびに、ロードされたと思いました。これを信じるのは間違っていますか?イベントがバックエンドからページに読み込まれるようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

eventscompleteイベントのスコープで定義されていません。データを別の関数に渡すeventsか、単にaddEventロジックをイベント ハンドラー内に移動する必要があります。例えば:

function onEventData(data) {
    for (var i = 0; i < data.length; i++){
        addEvent(data[i]);
    }
}

function initEvents() {
    $.ajax({
        url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json',
        success: onEventData, 
        error: function(data) {
            //  Note: hardcoded JSON event in here
            onEventData(hardcodedEvents);
        }
    });
}

completeリクエストが終了したとき (成功およびエラーのコールバックが実行された後) に呼び出されることに注意してください。ハンドラーはリクエストごとに 1だけ実行する必要があるため、この場合は使用しないでください。

于 2012-07-13T00:22:23.700 に答える
1

範囲の問題のようです。complete() コードを別の関数に移動し、success() と error() の両方から呼び出します。

function renderEvents(data) {
    // Add events
    for (var i = 0; i < data.length; i++){
        addEvent(data[i]);
    }
}

function initEvents() {
    $.ajax({
        url: '/Work/GetEvents/' + id, type: "GET", dataType: 'json',
        success: function (data) {
            renderEvents(data);
        },
        error: function(data) {
            //  Note: hardcoded JSON event in here
            renderEvents(hardcodedEvents);
        }
    });
}

編集: renderEvents() の変数名を修正しました。

于 2012-07-13T00:23:09.647 に答える