1

私はいくつかの.getJSON呼び出しを行っており、そのうちの1つが成功した場合は、boolをtrueに設定して、ページの他の場所で他のことを実行できるようにしています。jqueryの.data()関数を使用しようとしましたが、.getJSONコールバック内から設定できないようです。例えば:

$('#citations_button').data('citations', false);

$.getJSON(apaurl, function(data) {
    $('#apacite').html("<td class=\"bibInfoLabel\">APA Citation</td><td class=\"bibInfoData\">"+data+"</td>");
    $('#citations_button').data('citations', true);
}, "html");

// other .getJSONs look like above...

console.log("citations? "+$('#citations_button').data('citations'));

データが通過したことを知っていても、falseを出力します。.data()はキャッシュを使用してキーと値のペアを格納するため、これは機能すると思いました。どうすれば成功にフラグを立てることができますか?どんな援助にも感謝します!!

4

2 に答える 2

3

コードが実際に実行される順序を覚えておく必要があります。コードは実際には次の順序で実行されます。

$('#citations_button').data('citations', false);
$.getJSON(apaurl, ..., "html");
console.log("citations? "+$('#citations_button').data('citations'));

その後、最終的に、非同期リクエストが戻ってくると、コールバック関数が実行されます。

$('#apacite').html("<td class=\"bibInfoLabel\">APA Citation</td><td class=\"bibInfoData\">"+data+"</td>");
$('#citations_button').data('citations', true);

確かに、最終的にはに設定さcitationsれますが、その値をコンソールに出力してtrueから間もなくです。false

JSONデータを取得した後でのみ何かを実行したい場合は、そのコードが絶対にそのコールバック関数に含まれている必要があります(または、もちろん、そのコールバック関数内から呼び出す必要があります)。

すべての呼び出しの結果を待つ必要がある場合は、次のようにすることができます。

var expectedResponses = 2;

function gotResponsesFromAllCalls() {
    // Do things you can only do when ALL calls have returned.
};
$.getJSON(url1, function(data) {
    // Do things specific to the return of URL 1
    if (--expectedResponses == 0)
        gotResponsesFromAllCalls(); 
}, "html");

$.getJSON(url2, function(data) {
    // Do things specific to the return of URL 2
    if (--expectedResponses == 0)
        gotResponsesFromAllCalls(); 
}, "html");
于 2010-06-09T00:27:48.187 に答える
0

あなたが説明することを「ページの他の場所で何か他のことをする」と関数に入れてください。$ .getJSON()コールバックでその関数を呼び出します

于 2010-06-09T00:43:23.367 に答える