jQuery 中,会遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值给全局变量赋值的问题:
例如:
<script type="text/javascript" src="jquery-1.4.min.js"></script> <script language="JavaScript"> var mm = 1; $.getJSON("/test/GetIsExist", {id1: "3",id2: "5"}, function(data){ var ret = data; var show_info = eval_r(ret); mm = show_info[0].id; }); alert(mm); </script>
想用JavaScript 取testController中GetIsExist的值,赋给test.aspx中的全局变量mm,可是返回的值只在$.getJSON中起作用mm为8,在全局中显示时仍为1,请问该问题如何解决?
问题原因:Ajax是异步JavaScript&XML,浏览器解析页面时,JS只管执行当前代码,顺序执行。发送请求了,那是请求响应的事,它不管这些,只管继续执行在它面前的代码,所以不等Ajax响应返回,便会继续向下执行,这时你的全局mm仍然是初始值(在这里为1),如果你在回调函数function(data){}内部alert的话,就会是8了。一种是楼上说的方法 另一种就是把异步改为同步 async: false
方法一:在回调函数中实现
方法二:在回调函数外实现
<script type="text/javascript"> $(document).ready(function(e) { $("#register").click(function(e) { var result=true; $.ajax({url:"check_vcode.php", async: false, type: "POST", data: {vcode:$("#vcode").val()}, success: function(msg){ if(msg.indexOf("错误")!=-1){ $("#msg").html(msg); result=false; } } }); return result; }); });</script>
时间: 2024-12-26 09:19:41