OnClientClick的问题。迷惑了很久虽然问题解决了,但我还是不知道为什么会这样。所以请假下,都知道服务器控件
OnClientClick的问题。迷惑了很久 虽然问题解决了,但我还是不知道为什么会这样。所以请假下, 都知道服务器控件有onclick和OnClientClick事件,OnClientClick是执行客户端脚本。当返回true时才执行onclick,我现在就有这么一个服务器控件
<asp:Button ID="btnRegist" runat="server" Text="提交" OnClientClick="return CheckAll()" onclick="btnRegist_Click" />脚本中的CheckAll()函数,为了不让页面刷新。有个异步请求验证,信息是否正确,贴上主要代码,以下原始的js脚本写请求。就执行。
function CheckAll() { var xmlhttp=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.open("POST","check.ashx",true); xmlhttp.send("name=xxx&pwd=xxx"); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { var result = xmlhttp.responseText; if(result=="xxx"){ //逻辑判断 } } } } 可我用jquert这样写为什么就不执行请求。所以我很纳闷
function CheckAll() { $.post("check.ashx",{name:"xxx"},function(result){ if(result=="xxx"){ //逻辑判断 } }); }会的帮我解释下。谢谢。 OnClientClick
[解决办法] 1.监视ajax请求:
使用chrome或者FireBug监视ajax是否执行,参数是否正确
2.断点ashx文件,看是否进入了ashx了。
[解决办法] 唉 还是加断点看看有进去ashx文件没有
[解决办法] 可能是以下原因,未测试。。。。
jquery的post是异常请求,你的客户端请求发出去了,还未等到server返回消息,此时就执行了submit button的post动作,即立即会执行click事件(服务端方法btnRegist_Click),所以你此时已经监视不到客户端的post请求,也执行不到你的客户端回调方法(function(result).....)。
function CheckAll()
{
$.post("check.ashx",{name:"xxx"},function(result){
if(result=="xxx"){
//逻辑判断
//... 最后在此处提交表单, 应加一个全局变量标识,不执行后面的retrun false
}
});
return false; //加这一句,不要立即表单,等待服务返回
}
或使用$.ajax的同步方式(推荐)
$.ajax({
type: "POST",
url: xxx,
data: xxx,
async: false,
success: function(msg){
//your business...
}
});
[解决办法] 实际上要想比较清晰简单,那么你的 CheckAll 就应该永远 return false。因为它根本不能立刻返回(为了避免界面上卡死),所以它也就根本不能正常地告知 OnClientClick 是否要继续执行页面回发。也就是说,你的OnClientClick立刻执行完毕了,而此时根本不能断定是否可以回发页面。
在你的 CheckAll 的异步回调中,你才应该调用 GetPostBackEventReference(btnRegist,string.Empty) 去回发页面。只有回调中才能触发这个操作,而不是在 OnClientClick 执行时。
异步编程要求你改变原来的思维方式。
引用: 或使用$.ajax的同步方式(推荐) 同意!
[解决办法] 我看你怎么少了个pwd=xxx参数?[解决办法] 楼主 function CheckAll() { $.post("check.ashx",{name:"xxx"},function(result){ if(result=="xxx"){ //逻辑判断 } }); } 改成 function CheckAll() { $.get("check.ashx",{name:"xxx"},function(result){ if(result=="xxx"){ //逻辑判断 } }); } 试试 我以前也遇到过 post根本就没提交 get居然可以 求大神指点[解决办法] 3楼说的对,要加这个参数就可以了 async: false[解决办法] 同步跟异步的问题.[解决办法]
引用: 实际上要想比较清晰简单,那么你的 CheckAll 就应该永远 return false。因为它根本不能立刻返回(为了避免界面上卡死),所以它也就根本不能正常地告知 OnClientClick 是否要继续执行页面回发。也就是说,你的OnClientClick立刻执行完毕了,而此时根本不能断定是否可以回发页面。 在你的 CheckAll 的异步回调中,你才应该调用 GetPostBackEventReference(btnRegist,string.Empty) 去回发页面。只有回调中才能触发这个操作,而不是在 OnClientClick 执行时。 异步编程要求你改变原来的思维方式。Quote: 引用: 或使用$.ajax的同步方式(推荐) 同意! 每次看到 SP 一针见血的回复就精神抖擞!
[解决办法] 路过,不懂记下