今天修改网页的时候,给一个服务器空间Btton按钮加了一个OnClientClick客户端事件,当验证不通过是不执行服务器端OnClick事件。OnClientClick验证函数中。使用jquery 的post方法,修改完之后发现,只能执行客户端的验证,ajax事件并不执行,无论post中返回ture还是false,都没有任何作用。错误代码如下:
$.post("/ajax/users.ashx", { _type: "getustools", cls: "16" }, function (data) { if (data == "0") { Dialog2.open(420, 439); return false; } });
分析后意识到这是因为post方法是异步执行。所以,当js执行到post的时候。就不会管post的返回了。就直接跳过了post函数体里的代码。解决方法是使用jquery的ajax函数。在ajax可以设置一个参数。async,把async设置为false,就不在是异步执行了,就是同步执行了。这样就完美解决了这个问题。代码如下:
$.ajax({ url : "/ajax/users.ashx", data:{ _type: "getustools", cls: "16" }, cache : false, async : true, type : "POST", dataType : 'text', success : function (result){ return result; } });
修改完之后,运行程序发现问题并没有解决,上网搜索下,出错的原因是在success的回调函数中直接return,至于为什么不能这么做还不是太清楚。正确解决办法如下
var ret = null; $.ajax({ url : "/ajax/users.ashx", data:{ _type: "getustools", cls: "16" }, cache : false, async : true, type : "POST", dataType : 'text', success : function (result){ ret = result; } }); return ret;
至此OnClientClick事件中,使用ajax不起作用的问题完美结局
信息网址:http://www.khcha.com/ziyuan/view17838.htm