2011-04-11 67 views
1

我有以下代碼:訪問變量外阿賈克斯

var src, flickrImages = []; 

$.ajax({ 
    type: "GET", 
    url: "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=bf771e95f2c259056de5c6364c0dbb62&text=" + xmlTitle.replace(' ', '%20') + "&safe_search=1&per_page=5&format=json", 
    dataType: "json", 
    statusCode: { 
     404: function() { 
        alert('page not found'); 
       } 
    }, 
    success: function(data) { 
     $.each(data.photos.photo, function(i,item){ 
      src = "http://farm"+ item.farm +".static.flickr.com/" + item.server + "/" + item.id + "_" + item.secret + "_s.jpg"; 
      flickrImages[i] = '<img src="' + src + '">'; 
     }); 
    } 
}); 

// undefined returned here for flickrImages 

map.setZoom(13); 
map.setCenter(new google.maps.LatLng(xmlLat,xmlLng)); 
infowindow.setContent('<strong>' + xmlTitle + '</strong><br>' + xmlExcerpt + '<br><br>' + flickrImages.join('')); 
infowindow.open(map,this); 

我試圖訪問AJAX外flickrImages變量,這樣我可以把它放在谷歌地圖信息窗口一內。不幸的是,在ajax之外,它返回undefined。

我試着將flickr的東西移到ajax中,但不幸的是它丟失了其他一些信息,如xmlTitle和xmlExcerpt。

任何幫助,非常感謝。

在此先感謝,

戴夫。

回答

8

flickrImages未被定義的原因在於您的評論是因爲對$.ajax的調用是異步的,這意味着它在請求完成之前不會被阻止。

這就是爲什麼有一個success函數在底層HTTP請求完成時被「回調」。所以,你需要處理你的flickrImages變量從你的success功能,或者從你的success功能,通過flickrImages到其他功能,你的處理。

0

定義一個全局變量的Ajax調用之外,併爲其分配一個值

var myData 

$.ajax({ 
    type: "GET", 
    url: "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=bf771e95f2c259056de5c6364c0dbb62&text=" + xmlTitle.replace(' ', '%20') + "&safe_search=1&per_page=5&format=json", 
    dataType: "json", 
    statusCode: { 
     404: function() { 
        alert('page not found'); 
       } 
    }, 
    success: function(data) { 
     myData = data 
     myFunction() 
    } 
}); 
2

Ajax調用是異步的,所以它不會左右等待一個答案 - 它只是繼續和運行腳本的其餘部分。在設置中傳遞async:false(請參閱http://api.jquery.com/jQuery.ajax/)應該可以解決您的問題,但它會使腳本慢得多,因爲腳本將不得不等待ajax調用返回。

當您試圖執行成功回調時,腳本的其餘部分將被調用 - 它如何在xmlTitle和xmlExcerpt不可用?