今天在做一个项目的时候,由于以前没有出现过这情况,导致弄了多久才知道是这问题。
出现问题的代码
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>