function Test(AreaId) {
            var area ="";
            jQuery.getJSON("JqueryTest/City.js", function(data) {
                $("#city")[0].length = 0;
                $.each(data.JsData, function(i, d) {
                    if (d.DM == AreaId) {
                        area = d.MC + "";//已经改变了Area的值了
                        alert(area);
                    }
                });
            });
            return area;
        }
中间我已经改变了Area的值但是,最后返回的Area还是没有值!
为什么?????????

解决方案 »

  1.   

    你要了解着两个area是不同的两个area啊,
    你改变一个并不改变另一个。
    在javascript中一个方法表示一个变量作用范围。
    就好象我们说话时候一样:
    在讨论1+1这个问题的时候,答案是2;
    在讨论1+2这个问题的时候,答案是3。
    你能认为这两个答案表示一样的吗?解决办法:
    使用返回值(我不太了解jQuery,这里不知道能不能用);
    使用全局变量(不推荐);
    使用对象传递(这个比较高级了);
      

  2.   

    d.MC有没有值
    如果alert是空说明你的d.MC 没值
    undefine就另当别论了
      

  3.   

    d.MC有值,在赋值的时候把area弹出,就能出现值,但是到了最外层的函数就没有值了!!!
      

  4.   

    把area设成全局的
    。 function(data) { 
                    $("#city")[0].length = 0; 
                    $.each(data.JsData, function(i, d) { 
                        if (d.DM == AreaId) { 
                            area = d.MC + "";//已经改变了Area的值了 
                            alert(area); 看着好像在一个方法体里面,其实不是的,自己写过ajax实现方式的人都知道,这是一个callback
    也就是另一个方法,相当于调用另一个方法。所以你的局域变量改变不了。设成全局就可以了
      

  5.   

    var area =""; 
    function Test(AreaId) { 
                
      

  6.   

    在alert(area);后面加个break;试试 
      

  7.   

     呵呵,谢谢大家了,我已经找到错误的原因了,原来我调用了,JQuery中的getJSON方法,而这个方法是异步提交方法,所以当我return的时候,它还没有给我的area赋值,所以就一直为空,把jQuery里面的getJSON设置成同步执行就可以了,加上
            $.ajaxSetup({
                async: false
            });
    就可以了!