为什么取不到js return的值啊啊啊啊~~求大神讲解。。

 <!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="language.js"></script>
        <title></title>
    </head>

    <body>
        <button id="a1">中文</button>
        <a id="a2">香蕉</a>
        <a id="a3">苹果</a>
        <button id="a4">英文</button>
        <script>
            $("#a1").click(function() {
                cl(this);
            });
            $("#a4").click(function() {
                for(var i = 2; i <= 3; i++) {
                    var s = document.getElementById("a" + i).innerHTML;
//                   alert(s);
                    alert(getjson(s));
                    document.getElementById("a" + i).innerHTML = getjson(s);
                }

            });
        </script>
    </body>

</html>
 function cl(e) {
    $.get(e.id + ".json", function(data) {
        alert(data.but[0]);
        var list = document.getElementsByTagName("a");
        for(var i = 0; i < list.length; i++) {

            list[i].innerHTML = data.T[i];
        }

    });
}

function getjson(c) {

    $.get("a2.json", function(data) {
        var jValue = '';
        //      alert("yyyyyyy"+data);
        for(var item in data) {
            if(item == c) { //item 表示Json串中的属性,如'name'
                jValue = data[item]; //key所对应的value  
                return jValue;
            }

        }
        //return jValue;
    });
}

为什么html运行时无法接收到return的值啊,就是这个return jValue;有没有什么好的解决办法~~

我感觉你这方法是异步的吧,你获取值的时候,get方法还没走完

既然这个东西你一开始就需要,你为啥要用异步呢?异步是处理结果如何跟你当前正在做的事情没多大关系。你可以在你的getjson这个方法定义一个变量
然后异步改成同步获取,把获取到的数据赋值给这个变量,然后把这个变量返回去。

a2.json 里面是什么样子的数据??

c的值是document.getElementById("a" + i).innerHTML;
比如说, 你这个c='香蕉'; 能和data一样吗?我觉得不可能吧??

你自己调试一下不就OK了吗

getjson 写个回调函数应该可以解决

如果需要通过Jquery Ajax请求并获取值返回,那么通过$.get是实现不了的,你可以使用$.ajax();这个API,设置参数时将async设置成false,
这样的话就是同步请求。
http://www.w3school.com.cn/jquery/ajax_ajax.asp

 <!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="language.js"></script>
    <title></title>
</head>

<body>
    <button id="a1">中文</button>
    <a id="a2">香蕉</a>
    <a id="a3">苹果</a>
    <button id="a4">英文</button>
    <script>
    $("#a1").click(function() {
        cl(this);
    });
    $("#a4").click(function() {
        for (var i = 2; i <= 3; i++) {
            var s = document.getElementById("a" + i).innerHTML;
            //                   alert(s);
            //alert(getjson(s));
            //document.getElementById("a" + i).innerHTML = getjson(s);
            getjson(s);

        }

    });

    function cl(e) {
        $.get(e.id + ".json", function(data) {
            alert(data.but[0]);
            var list = document.getElementsByTagName("a");
            for (var i = 0; i < list.length; i++) {

                list[i].innerHTML = data.T[i];
            }

        });

        function getjson(c) {

            $.get("a2.json", function(data) {
                var jValue = '';
                //      alert("yyyyyyy"+data);
                for (var item in data) {
                    if (item == c) { //item 表示Json串中的属性,如'name'
                        jValue = data[item]; //key所对应的value  
                        //return jValue;
                        document.getElementById("a" + i).innerHTML = jValue;
                    }

                }
                //return jValue;
            });
        }
    }
    </script>
</body>

</html>

还有就是你设置内容不能直接在异步成功以后设置吗?为什么要再外层设置?

把异步改成同步就可以获取到了哦

很简单问题,大概解决方法有两种,其一,设置为同步模式,其二,在getJson内部将你的值传到另一个function中,其实你要是直接把这个function作为参数直接传进来后调用也是OK的

主要是因为函数执行时间小于ajax数据加载时间导致的,毕竟ajax以异步加载数据而出名。

 function getjson(c) {
            var jValue = '';
                        //这里采用ajax的同步请求,才能保证jValue最后有值
            $.get("a2.json", function(data) {
                for (var item in data) {
                    if (item == c) { //item 表示Json串中的属性,如'name'
                        jValue = data[item]; //key所对应的value  
                        document.getElementById("a" + i).innerHTML = jValue;
                    }
                }
            });
                        return jValue;
        }

你说没有进入if (item == c) 说明你在for (var item in data)这个循环的时候 item值就是你不是期望值了,你要着重看一下这个item值,item!=c,当然不对了

ajax改成同步了为什么还是取不到。。。。

 function getjson(key) {
    var result = "";
    $.ajax({
        type: "get",
        url: "a2.json",
        contentType: "application/json; charset=utf-8",
        dataText: "jsonText",
        async: false,
        cache: false,
        dataType: "json",
        success: function(result) {
            for(var item in result) {
                if(item == key) { //item 表示Json串中的属性,如'name'  
                    var jValue = result[item]; //key所对应的value  
                    return jValue;

                }
            }

        }
    });
}

直接输出你请求回来的值看有没有,有就是上面代码出的问题。