访问ajax之外的变量

我有以下代码:
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变量,所以我可以把它放在一个infowindow谷歌地图。不幸的是,在ajax之外它返回undefined。 我尝试将flickr的东西移动到ajax中但不幸的是它失去了一些其他信息,如xmlTitle和xmlExcerpt。 任何帮助深表感谢。 提前致谢, 戴夫。     
已邀请:
your1ѭ未定义你的注释的原因是因为对
$.ajax
的调用是异步的,这意味着在你的请求完成之前它不会被阻塞。 这就是为什么有一个
success
函数在底层HTTP请求完成时被“回调”。所以,你需要从
success
函数处理你的
flickrImages
变量,或者从你的
success
函数处理你的
flickrImages
变量,将
flickrImages
传递给你处理的其他函数。     
ajax调用是异步的,所以它不会等待答案 - 它将继续运行其余的脚本。在设置中传递async:false(请参阅http://api.jquery.com/jQuery.ajax/)应该可以解决您的问题,但是由于脚本必须等待ajax调用返回,因此会慢很多。 当你尝试做的时候,从成功回调中调用脚本的其余部分会更简洁 - xmlTitle和xmlExcerpt在那里是不可用的?     
在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()
    }
});
    
正如Karl Agius所说,“ajax调用是异步的”。为此你只需添加
async: false,
你的ajax请求。这是你添加这个代码后的代码:
$.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",
    async: false,
    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 + '">';
        });
    }
});
但是在ajax调用中停止异步并不是一个好习惯。但是会为你工作。成功使用Ajax回调(请在此处查看)。     

要回复问题请先登录注册