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

来源:互联网 发布:连杆机构设计软件 编辑:程序博客网 时间:2024/05/29 08:16

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

出现问题的代码

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>


0 0