码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-08 17:08:27      阅读:197      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!