我正在尝试让jQuery.getJSON()调用使用它返回的JSON数组更改全局变量
var photo_info ;
//Advance to the next image
function changeImage(direction) {
jQuery('img#preview_image').fadeOut('fast');
jQuery('#photo_main').css('width','740px');
if (direction == 'next') {
jQuery.getJSON('/ajaxupdate?view&sort='+sort+'&a='+a+'&s=' + title_url_next, function(data) {
photo_info = data;
title_url = photo_info.title_url;
title_url_next = photo_info.preview_title_url_next;
title_url_previous = photo_info.preview_title_url_previous;
});
} else if (direction == 'prev') {
jQuery.getJSON('/ajaxupdate?view&sort='+sort+'&a='+a+'&s=' + title_url_previous, function(data) {
photo_info = data;
title_url = photo_info.title_url;
title_url_next = photo_info.preview_title_url_next;
title_url_previous = photo_info.preview_title_url_previous;
});
}
}
但是,变量photo_info只能从getJSON()函数中访问,并从脚本中的任何其他位置返回undefined。
我做错了什么?谢谢你的帮助。
答案 0 :(得分:1)
如果您在photoinfo
返回后立即在脚本的其余部分查看changeImage
,那么它当然没有值,因为Ajax调用是异步的。您需要重新考虑您的应用程序,使其更具事件性。
答案 1 :(得分:1)
JavaScript范围界定与标准范围不同。由于嵌套函数,您实际上正在失去范围。试着给这篇文章读一读:
http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/
答案 2 :(得分:1)
正如Randal所说,Ajax调用是异步的。使用ajaxComplete函数或将getJSON函数替换为.ajax调用,并在成功函数中使用photo_info var,例如:
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(photo_info);
}
});