我有这样的事情:
$.ajax({
type: 'GET',
url: my_url,
success: function(data) {
$('#some_div').data('test', 'This is a test');
}
});
然后在成功回调之外,我试图访问我的测试变量,如
console.debug($('#some_div').data('test'));
但这会返回undefined
请帮助
谢谢
答案 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()。
答案 1 :(得分:0)
成功功能在请求成功返回后发生。
你的console.debug行在你进行$ .ajax调用后立即发生,即在它检查的值由ajax成功回调设置之前发生:
$('#some_div').data('test')
未定义$('#some_div').data('test')
仍未定义!$('#some_div').data('test')
仍未定义...... $('#some_div').data('test')
是的,这是异步逻辑如何工作的最简单的例子,因此你得到了评论。
答案 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中,以避免污染全局范围。
(注意:有更好的方法,但避免太复杂化)