分享一个jquery ajax 中不能修改全局变量问题的方法

今天在做一个项目的时候,由于以前没有出现过这情况,导致弄了多久才知道是这问题。

出现问题的代码

var unc = 0;
$.get(
  'index.php',
  'data=1',
  function(res)
  {
       unc=1;
  }
);

alert(nuc);

这样的话,不管ajax成功返回与否,全局变量unc都不会变

为什么会出现这情况呢?

答案是:ajax是进行的异步操作

解决办法:

async:false

$.ajax({
	 type:'get',
	 url:'index.php?act=check_email&email=' + $('#email_reg').val(),
	 async:false,
	 success:function(response){
	   if (response.error==0) {
			unc = 1;	
	          }
	     },
	 dataType:'json'
 });

以上方法是ajax的同步调用,只有在获取到了data值并赋值给result以后才会返回result完成该方法的调用。若设为async:true,

则会未等到获取data值就已经返回了result。

自己的上一篇文章asp.net JQuery Ajax WebService Gridview 任意 双击 某一列 编辑修改

jquery方法就可以修改成

<script type="text/javascript">
    $(function () {
        var content;
        var resultajax =0;//加一个全局变量
        var indexId = $("#GridView1 td:eq(1)").text();
        var trcol;
        var arr = ['表头1', 'ID', '列1', '列2', '列3', '列4', '列5'];  
        $("#GridView1 td:not(:lt(2))").dblclick(function () {
            var clickObj = $(this);
            trcol = arr[$(this).parent().find("td").index($(this)[0])];
            content = clickObj.html().replace(" ", "");
            changeToEdit(clickObj);
        });
        function changeToEdit(node) {
            node.html("");
            var inputObj = $("<input type='text'/>");
            //            inputObj.css("border", "0").css("background-color", node.css("background-color"))
            //.css("font-size", node.css("font-size")).css("height", "20px")
            //.css("width", node.css("width")).val(content).appendTo(node)
            //.get(0).select();
            inputObj.css("border", "0").css("background-color", '#d5d5d5')
.css("font-size", node.css("font-size")).css("height", "20px")
.css("width", node.css("width")).val(content).appendTo(node)
.get(0).select();
            inputObj.click(function () {
                return false;
            }).keyup(function (event) {
                //                var keyvalue = event.which;
                //                if (keyvalue == 13) {
                //                    //node.html(node.children("input").val());
                //                    if (node.children("input").val() != content) {
                //                        if (confirm("是否保存修改的内容?", "Yes", "No")) {
                //                            node.html(node.children("input").val());
                //                        } else {
                //                            node.html(content);
                //                        }
                //                    } else {
                //                        node.html(content);
                //                    }
                //                }
                //                if (keyvalue == 27) {
                //                    node.html(content);
                //                }
            }).blur(function () {
                if ((node.children("input").val() != content) && (node.children("input").val() != " ")) {
                    if (confirm("是否保存修改的内容?", "Yes", "No")) {
                        updateitem(trcol, node.children("input").val(), indexId);
                        //alert(trcol);
                        if (resultajax > 0) {
                            node.html(node.children("input").val());
                            alert("保存修改成功!");
                        }
                        else {
                            alert("保存修改失败!");
                        }
                    } else {
                        node.html(content);
                    }
                } else {
                    node.html(content);
                }
            });
        }
        function updateitem(col, val, id) {            
            $.ajax({
                type: "POST",
                async: false,//加这个ajax就可以修改全局变量了
                url: '<%=ResolveUrl("../WebService/GetAuto.asmx/UpdateA") %>',
                data: "{ 'col': '" + col + "','val': '" + val + "','id': '" + id + "'}",
                // 发送信息至服务器时内容编码类型
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msdata) {
                    // AJAX响应被包装到一个d对象里,如{"d":true}, 
                    // 因此需要用到msdata.d来获取请求返回的布尔值
                    if (msdata.d) {
                        //alert("保存修改成功!");
                        resultajax = 1;
                    }
                    else {
                        //alert("保存修改失败!");
                    }
                },
                error: function (xhr, textStatus, errorThrown) {
                    alert("AJAX错误:" + errorThrown);
                }
            });
        }
    });
    
</script>


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值