我正在尝试使用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。
我哪里做错了?
3条答案
按热度按时间yc0p9oo01#
正如Randal所说 AJAX 调用是异步的。使用ajaxComplete函数或将getJSON函数替换为.ajax调用,并在success函数中使用photo_info变量,例如:
egmofgnx2#
如果您在
changeImage
返回后立即查看脚本的其余部分中的photoinfo
,那么它当然不会有值,因为 AJAX 调用是异步的,您需要重新考虑应用程序,使其更加事件驱动。lf5gs5x23#
JavaScript作用域与标准作用域不太一样。看起来你实际上是因为嵌套函数而失去了作用域。试着读一下这篇文章:
http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/