在.getJSON回调中设置jQuery .data()

时间:2010-06-09 00:16:22

标签: jquery getjson

我正在做几个.getJSON调用,如果其中任何一个成功,我正在尝试将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'));

打印错误,即使我知道数据通过。我认为这会起作用,因为.data()使用缓存来存储键/值对。我怎么能成功?感谢任何帮助!!

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

在功能中将您描述的内容称为“在页面上的其他位置执行其他操作”。在$ .getJSON()回调

中调用该函数