首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

OnClientClick的有关问题。迷惑了很久

2013-04-02 
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居然可以 求大神指点OnClientClick的有关问题。迷惑了很久
[解决办法]
3楼说的对,要加这个参数就可以了 async: false
[解决办法]
同步跟异步的问题.


[解决办法]

引用:
实际上要想比较清晰简单,那么你的 CheckAll 就应该永远 return false。因为它根本不能立刻返回(为了避免界面上卡死),所以它也就根本不能正常地告知 OnClientClick 是否要继续执行页面回发。也就是说,你的OnClientClick立刻执行完毕了,而此时根本不能断定是否可以回发页面。

在你的 CheckAll 的异步回调中,你才应该调用 GetPostBackEventReference(btnRegist,string.Empty) 去回发页面。只有回调中才能触发这个操作,而不是在 OnClientClick 执行时。

异步编程要求你改变原来的思维方式。


Quote: 引用:

或使用$.ajax的同步方式(推荐)

同意!


每次看到 SP 一针见血的回复就精神抖擞!
[解决办法]
路过,不懂记下

热点排行