var optionStr="";
$.getJSON("/index.php/default/query/getCabinetRow/row_war_id/"+war_resource_id,function(data){
$.each(data,function(i,item){
optionStr+="<option value='"+item.row_id+"'>"+item.row_name+"</option>";
});
alert(optionStr);
});
alert(optionStr);
上一个alert可弹出内容,有值
但下一个alert就为空
这是什么原因
7 个解决方案
#1
因为它是异步执行的,
所有最外面的alert会先执行。
所以你就看到外面的是空的了。
同步执行就不会有问题了,
参考下面代码,你就明白了:
所有最外面的alert会先执行。
所以你就看到外面的是空的了。
同步执行就不会有问题了,
参考下面代码,你就明白了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript" type="text/javascript" src="jquery-1.4.2.js"></script>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var d = "";
<!--
//同步 async: false
//默认 async: true
$.ajax({url: "http://www.baidu.com", async: false, success: function(data) {
d = data;
alert(d);
}});
alert(d);
//-->
</SCRIPT>
</BODY>
</HTML>
#2
你不就是想把所有返回的值作为选项加入下拉框吗,那就直接在上一个ALERT那里加好了。
至于你说的这个现象,是有点不可思议,目前的代码看不出来。
至于你说的这个现象,是有点不可思议,目前的代码看不出来。
#3
刚看到楼上的解释,是啊,唉,晕了。
#4
更好理解的一个例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript" type="text/javascript" src="jquery-1.4.2.js"></script>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var d = "";
<!--
//同步 async: false
//默认 async: true
$.ajax({url: "http://www.baidu.com", async: true, success: function(data) {
d = data;
//alert(d);
}});
alert(d);
//这里面设置2秒,
//根据你网速来设
//保证此时$.ajax已经返回
setTimeout(function(){alert(d);}, 2000);
//-->
</SCRIPT>
</BODY>
</HTML>
#5
每天回帖即可获得10分可用分!
#6
设置成同步就好了
#7
没有值的原因就是ajax赋值还没有完成,最下面的alert就取值了。所以还是空值
#1
因为它是异步执行的,
所有最外面的alert会先执行。
所以你就看到外面的是空的了。
同步执行就不会有问题了,
参考下面代码,你就明白了:
所有最外面的alert会先执行。
所以你就看到外面的是空的了。
同步执行就不会有问题了,
参考下面代码,你就明白了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript" type="text/javascript" src="jquery-1.4.2.js"></script>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var d = "";
<!--
//同步 async: false
//默认 async: true
$.ajax({url: "http://www.baidu.com", async: false, success: function(data) {
d = data;
alert(d);
}});
alert(d);
//-->
</SCRIPT>
</BODY>
</HTML>
#2
你不就是想把所有返回的值作为选项加入下拉框吗,那就直接在上一个ALERT那里加好了。
至于你说的这个现象,是有点不可思议,目前的代码看不出来。
至于你说的这个现象,是有点不可思议,目前的代码看不出来。
#3
刚看到楼上的解释,是啊,唉,晕了。
#4
更好理解的一个例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript" type="text/javascript" src="jquery-1.4.2.js"></script>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
var d = "";
<!--
//同步 async: false
//默认 async: true
$.ajax({url: "http://www.baidu.com", async: true, success: function(data) {
d = data;
//alert(d);
}});
alert(d);
//这里面设置2秒,
//根据你网速来设
//保证此时$.ajax已经返回
setTimeout(function(){alert(d);}, 2000);
//-->
</SCRIPT>
</BODY>
</HTML>
#5
每天回帖即可获得10分可用分!
#6
设置成同步就好了
#7
没有值的原因就是ajax赋值还没有完成,最下面的alert就取值了。所以还是空值