1

私は次のコードを持っています:

var table = new Array();
function getTableData(year) {
    if (!table.hasOwnProperty(year)) {
        $.ajax({
            ...
            success: function(data) {
                table[year] = data;
            }
        });
    }
}

したがって、その関数に実行させたいのは、基本的に、以前にそのAjaxリクエストを呼び出したことがあるかどうかを確認することです。呼び出した場合は、再度呼び出さずに、以前にロードされたデータを返します。

これは魅力のように機能します。動作しないのはこれです:

function showTable(year) {
    $('#loadingAnimation').show();
    $('#tableDiv').ajaxComplete(function() {
        // insert data into table
    }
    $('#loadingAnimation').hide();
}

以前にデータがロードされていない限り(つまり、table [year]がまだ存在しない限り)、ajax-requestが実行され、データが完了すると、データがテーブルに挿入され、すべてが正常に機能します。しかし、table [year]が存在する場合、関数には待機するものがなく、空白のテーブルと読み込み中のアニメーションが表示されます。

私が以前に試したのは、ajax-requestを同期に設定し、関数で「ajaxComplete」を呼び出さないようにすることです。その後、すべてが機能しますが、アニメーションの読み込みがまったく行われず、待機期間中に画面がフリーズします。

スクリプトを機能させる方法はありますか?前もって感謝します :)

4

2 に答える 2

0

前のテーブル[年]を格納するためにもう1つの変数を設定して試すことができます。したがって、以降のすべての呼び出しでは、他のことを行う前にそれを確認します。たとえば。何かのようなもの -

// An example from a dynamic AJAX gallery I had built        
var 
// ...,
prepareMarkup,
loadResults,
resultsCache = {},
// ...
;

loadResults = function(req, category, tracker) {
// I am calling loadResults on every click (navigation in ur case)
// to load galleries
// thus, tracker is different for each link

if (req && req !== "") {
    // I am using a tracker by setting to a link, 
    // which keeps track of those that users have already clicked 
    // at least once
    if (typeof resultsCache[tracker] === "object" 
        && resultsCache[tracker].lookbookResults.length > 0) {
        // Load from cache instead
        buildLookbook(resultsCache[tracker], category);
        return;
    }


    $.ajax({
        type: "GET",
        url: "/bin/content/lookbook",
        data: "lookbook-feed=" + req + "&siteName=" + APP.Site.siteRoot,
        dataType: "json",
        success: function(response) {
            // Set cache
            resultsCache[tracker] = response;

            // Go ahead to build UI
            buildLookbook(response, category);
        },

//...

これがあなたが探していたものであることを願っています

于 2012-06-18T05:41:39.253 に答える
0

showTable()別の機能である理由はありますか?のように、初期ロード後にテーブル データを更新するための別のボタンはありますか?

それ以外の場合は、次のように作業コードにロード アニメーションを直接追加することをお勧めします。

if (!table.hasOwnProperty(year)) {
    $('#loadingAnimation').show(); //start querying for data, display the icon
    $.ajax({
        ...
        success: function(data) {
            $('#loadingAnimation').hide(); //data found, hide icon
            table[year] = data;
        }
    });
}
于 2012-06-17T10:49:17.987 に答える