今天修改網頁的時候,給一個服務器空間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.respectj.cn/ziyuan/view17838.htm