2011-04-11 71 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不可用?