2010-01-30 58 views
0

我想有一個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。

我在做什麼錯?謝謝你的幫助。

回答

1

爲蘭德爾說Ajax調用是異步的。使用ajaxComplete功能或與阿賈克斯調用替換的getJSON功能和使用photo_info VAR whithin成功的功能例如爲:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    $('.result').html(photo_info); 
    } 
}); 
1

如果您在changeImage返回後在腳本的其餘部分查看photoinfo,那麼當然它不會有值,因爲Ajax調用是異步的。你需要重新考慮你的應用程序,以便更多的事件驅動。

+0

嗨 - photo_info甚至不是從changeImage()函數中訪問。謝謝。 – ensnare 2010-01-30 01:33:32

+0

Randal是對的,因爲即使在changeImage函數中,ajax調用還沒有返回。查看我的答案,瞭解如何解決問題的選項。 – pedro 2010-01-30 01:49:16