<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="name" runat="server"></asp:TextBox><br />
        <asp:TextBox ID="pwd" runat="server"></asp:TextBox><br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return DoRequest()"  onclick="Button1_Click" />
    </div>
</form>
js:<script language="javascript" type="text/javascript">
    var reqObj;
    var i = false;
    function DoRequest()
    {
        i = false;
        reqObj = false;
        var name = document.getElementById("name");
        var pwd = document.getElementById("pwd");
        /*
          //这里创建XMLHttpRequest对象,代码略
        */
        var url = "***.aspx?name=" + name.value + "&pwd=" + pwd.value;
        reqObj.onreadystatechange = jsProcess;
        reqObj.open("GET", url, true);
        reqObj.send(null);
        return i;
    }
    function jsProcess()
    {//i = true;
        if (reqObj.readyState == 4)
        {
            if (reqObj.status == 200)
            {
                var txt = reqObj.responseText;
                if (txt == "1") { alert("用户名密码正确!"); i = true; }
                else {
                    alert("用户名密码有误");
                    document.getElementById("name").focus();
                }
            }
        }/**/
    }
</script>
问题是这样的
用户名密码输入错误则能正常提示输入有误。输入正确的话,则需要点两次按钮才执行OnClick即提交。为什么?怎么解决?而,如果在return i;之前alert("");像这样:
reqObj.open("GET", url, true);
alert("");
return i;
则也能正常执行即只点按钮一次就提交。。
期待解答,谢谢。

解决方案 »

  1.   

    i=true;
    改成 return true;试试
      

  2.   

    回Accelerator
    试过的,不行呢
      

  3.   

    reqObj.open("GET", url, true);
    异步,函数return i的时候那边还来不及赋值.
      

  4.   

    改成同步看看
    reqObj.open("GET", url, false); 
      

  5.   

    回Accelerator,
    这样的确能解决问题。而且这里也不需要异步,呵呵。谢谢你了。
    思路很重要。
      

  6.   

    正确后 alert("用户名密码正确!");是否提示
    if(txt == "1") { i = true; }reqObj.send(null);
    if(i)
    {
     alert("用户名密码正确!"); 
    }
      

  7.   

    wuyq11的回复也给了我解决问题的提示,谢谢结贴,谢谢二位。