为什么取不到js return的值啊啊啊啊~~求大神讲解。。 20C
 <!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;有没有什么好的解决办法~~

15个回答

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

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

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

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

huang931027
IAmObject 不是因为没有返回值,是因为就没进到判断里面
接近 3 年之前 回复

你自己调试一下不就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的

共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问