无法在ajax成功中访问jquery数据集

时间:2013-08-26 16:44:07

标签: javascript jquery

我有这样的事情:

$.ajax({
    type: 'GET',
    url: my_url,
    success: function(data) {

        $('#some_div').data('test', 'This is a test');

    }
});

然后在成功回调之外,我试图访问我的测试变量,如

console.debug($('#some_div').data('test'));

但这会返回undefined

请帮助

谢谢

3 个答案:

答案 0 :(得分:0)

您需要熟悉$.ajax .done().fail()方法。

jqXHR.done(function(data,textStatus,jqXHR){}); 成功回调选项的替代构造,.done()方法替换了不推荐使用的jqXHR.success()方法。有关实现的详细信息,请参阅deferred.done()。

jqXHR.fail(function(jqXHR,textStatus,errorThrown){}); 作为错误回调选项的替代构造,.fail()方法替换了不推荐使用的.error()方法。有关实现的详细信息,请参阅deferred.fail()。

More Info Here!

答案 1 :(得分:0)

成功功能在请求成功返回后发生。

你的console.debug行在你进行$ .ajax调用后立即发生,即在它检查的值由ajax成功回调设置之前发生:

  1. $('#some_div').data('test')未定义
  2. ajax调用
  3. $('#some_div').data('test')仍未定义!
  4. 您的console.debug行运行
  5. $('#some_div').data('test')仍未定义......
  6. 你的ajax电话成功回归;现在定义了$('#some_div').data('test')
  7. 是的,这是异步逻辑如何工作的最简单的例子,因此你得到了评论。

答案 2 :(得分:0)

您需要将结果存储在全局变量中,即:

var globalVariable;
$.ajax({
    type: 'GET',
    url: my_url,
    success: function(data) {

        $('#some_div').data('test', 'This is a test');
        globalVariable = data;
    }
});

将内容存储在全局范围内并不是最好的选择,因此我建议将其包装在Self-Executing Anonymous Function中,以避免污染全局范围。

(注意:有更好的方法,但避免太复杂化)