<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;
则也能正常执行即只点按钮一次就提交。。
期待解答,谢谢。
改成 return true;试试
试过的,不行呢
异步,函数return i的时候那边还来不及赋值.
reqObj.open("GET", url, false);
这样的确能解决问题。而且这里也不需要异步,呵呵。谢谢你了。
思路很重要。
if(txt == "1") { i = true; }reqObj.send(null);
if(i)
{
alert("用户名密码正确!");
}