欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 21:51:50
...

jQuery 中,会遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值给全局变量赋值的问题:

例如:

<script language="JavaScript"> 
    var count= 1; 
    $.post("<%=path%>/AdminCenter/SysFunction/GetOrderNo", 
      { parentCode: pc },
          function (data) {
              count = data.result;
          },
          "json");
    alert(count); 
</script>

问题:想用JavaScript 取testController中GetIsExist的值,赋给test.aspx中的全局变量 count,可是返回的值只在$.getJSON中起作用count为8,在全局中显示时仍为1,请问该问题如何解决?

问题原因:Ajax是默认都是异步JavaScript&XML,浏览器解析页面时,JS只管执行当前代码,顺序执行。发送请求了,那是请求响应的事,它不管这些,只管继续执行在它面前的代码,所以不等Ajax响应返回,便会继续向下执行,这时你的全局 count 仍然是初始值(在这里为1),如果你在回调函数function(data){}内部alert的话,就会是8了。

方法一:直接在回调函数中实现操作

<script language="JavaScript"> 
    var count= 1; 
    $.post("<%=path%>/AdminCenter/SysFunction/GetOrderNo", 
      { parentCode: pc },
          function (data) {
              count = data.result;
              alert(count); 

          },
          "json");
</script>

方法二:在回调函数外实现,把异步改为同步 async: false

<script language="JavaScript"> 
    var count= 1;        
   $.ajax({
        url: "<%=path%>/AdminCenter/SysFunction/GetOrderNo",
        async: false, //改为同步方式
        type: "POST",
        data: { parentCode: pc },
        success: function (data) {
            count = data.result;
        },
        dataType:"json"
    });
    alert(count); 
</script>