<!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;
}
}
}
});
}
直接输出你请求回来的值看有没有,有就是上面代码出的问题。