在jquery中等待getJSON的回调完成

时间:2012-08-20 16:51:01

标签: javascript jquery callback getjson

我有这样的事情:

<div id="content"></div>

和JS:

function getData(id) {
    $.getJSON('url/to/jsondata',{id: id}, function(data) {
         /** append some data to div#content  **/
         $('#content').data('key', 'value');
     });

然后我想在脚本中获取#content的数据:

$(document).ready(function() {
    getData(1); // run getData with some id
    console.log($('#content').data('key'));
});

问题是在getJSON回调完成后没有运行console.log,所以我在日志中得到一个未定义的值。 哪种方法可行? 谢谢!

3 个答案:

答案 0 :(得分:2)

您已在getJSON来电中定义了回调。要获得结果,请将console.log代码放在与/** append some data to div#content **/注释相同的函数中。

这里是getJSON的jQuery文档,因此您可以看到哪个是正确的参数以及如何进行布局:http://api.jquery.com/jQuery.getJSON/

答案 1 :(得分:1)

从ajax函数返回延迟对象,并在其上使用always,done或fail方法:

function getData(id) {
    return $.getJSON('url/to/jsondata',{id: id}, function(data) { //return this
         $('#content').data('key', data);
     });
}

$(document).ready(function() {
    getData('content').always(function() { //is returned as deffered object
        console.log($('#content').data('key')); //runs when ajax completed
    });
});​

答案 2 :(得分:-1)

你应该把log-call放在回调函数中,如下所示:

function getData(id) {
    $.getJSON('url/to/jsondata',{id: id}, function(data) {
         /** append some data to div#content  **/
         $('#content').data('key', 'value');

         console.log($('#content').data('key'));
     });