zoukankan      html  css  js  c++  java
  • JavaScript 之 回调函数的返回值给全局变量赋值问题

      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>
  • 相关阅读:
    一个封装好的CSV文件操作C#类代码
    C#导出GridView数据到Excel文件类
    JQ获取选中select 标签的值
    JQ替换标签与内容
    layerUi与AJAX的一种思路
    .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
    MVC Html辅助方法DropDownList的简单使用、连接MYSQL数据库用自定义model类接收
    EF中GroupBy扩展方法的简单使用
    sqlserver操作命令
    发送短信验证码及调用短信接口与C# 后台 post 发送
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4321851.html
Copyright © 2011-2022 走看看