首页 > 编程语言 > 详细

javascript 回调函数的返回值给全局变量赋值的问题

时间:2015-03-08 17:05:50      阅读:1259      评论:0      收藏:0      [点我收藏+]

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>

 

 

 

javascript 回调函数的返回值给全局变量赋值的问题

原文:http://www.cnblogs.com/xinaixia/p/4321851.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!