解决方案 »

  1.   

    async:false,//添加async参数设成同步试试
      

  2.   

    异步返回时你的那个return已经执行完了啊  也就是先执行return那块的  后执行ajax的success 
      

  3.   

    var MeteoInfo = function () {
    var Stations=[];
        $.ajax({
            type: "POST",
            url: "/Meteo/GetStation",
            data: "{ \"name\":\"" + "all" + "\",\"type\": \"" + "max" + "\" }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                var joke = [];
                joke = msg;
    for(i in joke){
    Stations[i] = joke[i];
    }
                //这里这样改一下,应该是可以的。但是在使用最后返回的load方法时,要保证这个ajax已经执行结束了,即,joke已经获取到值了才行。
            },
            error: function (xhr, msg) { alert(msg); return Stations; }
        });
        return {
            load: function () {
                    return Stations;
            },
        }
    } ()当然,1#给的方法,设置成同步调用,也是没有问题的。。我这个方法,你也试试看吧。
      

  4.   

    success: function (msg) {
                var joke = [];
                joke = msg;
    //这里虽然是返回的json格式,但是这里到底是返回了一个json格式的字符串,需要解析才能成数组,还是说直接返回的数组啊?
    //如果需要解析的话,你这里可是没有进行解析啊。
    //如果本来就是数组,就当我没有说吧,我二了。
    for(var i in joke){
    //把 i 定义成私有变量吧,以防影响全局变量
    Stations[i] = joke[i];
    }
                //这里这样改一下,应该是可以的。但是在使用最后返回的load方法时,要保证这个ajax已经执行结束了,即,joke已经获取到值了才行。
            },
      

  5.   

    先感谢2009和zyl_lyr1019的热心回答,最后答案确实是异步造成的,设置成同步(async:false,)就没有问题了。
       for(i in joke){             
       Stations[i] = joke[i];            }
    这段代码也可以不要也可以使用,返回的是数组,这个是没有问题的,再次感谢zyl_lyr1019