1

jquery と ajax を使用して、最初にページに出力されたメッセージを変更しようとしています:

document.write('<p align="center" id="DataReady">Waiting for server to update the table</p>');

to something else once all of the ajax calls are made and my data is updated. The general outline of my code is as follows:

function getData(m) {

    jqs[m] = $.ajax({
        url : WebURL[m],
        type : 'GET',
        dataType: 'jsonp',
        myJ : m
    });
    return jqs[m];
}


function handleData(json_data){

    var j = this.myJ;

    // Inside this function, I manipulate the json_data 
    // object and store it into other variables
}   

$(document).ready(function() { 

    for (var i=0; i<5; i++){
        getData(i).done(handleData); 
    }

    $.when(jqs).done(function(){
        document.getElementById("DataReady").innerHTML = "Up to date!"
    });
});

When the document is ready, I am basically looping through my getData function and executing ajax calls using deferred objects, and when each respective ajax call is done, the handleData function takes the json data (specific to each respective ajax call) and manipulates it for further use.

However, once I loop through all of the ajax calls (which are stored in the jqs array), I can't seem to make the last part work correctly: my $.when statment. I have reviewed the jquery API (http://api.jquery.com/jQuery.when/) and can't seem to see what I'm doing wrong.

最後のステートメントで実現したいのは、すべての ajax 呼び出しが行われたとき (配列 jqs に格納されているとき)、最初のメッセージが "Up to date!" に変更されることですが、すぐには変更されません。メッセージが「Up to date!」に変更されているようです。ajax 呼び出しは行われていませんが。さらに厄介なのは、行を削除すると、getData(i).done(handleData);ajax 呼び出しが発生していなくてもメッセージが変更されることです。誰でもこれを修正する方法について何か考えがありますか? 建設的な助けをいただければ幸いです。ありがとう。

4

1 に答える 1