我有一个ajax调用,它设置一个可以阻止submition的标志。
问题是,如果我在if(flag==1)
和return true
语句上设置断点并逐步执行代码,它会在flag = 1上重定向...但如果我不重复,它永远不会重定向。
怎么回事?
$("#login").submit(function(e) {
var flag = 2;
var un = $('#username').val();
$.ajax(
{
type: "POST",
url: "Utilities/CheckUsername.php",
data: "un="+ un,
success: function(data)
{
if(data=="Username Does Not Exist")
{
flag=1;
}
else
{
$('#mike').html(data);
flag=2;
}
}
});
if(flag==1)
{
return true;
}
else
{
e.preventDefault();
}
return false;
});
});
编辑:这仍然无效。只是为了澄清用户名是否不存在,我们将继续访问注册页面,它不会告诉他们用户名是什么,并尝试另一个。
<script type="text/javascript">$(document).ready(function(){
$("#submitButton").click(function(e) {
var un = $('#username').val();
$.ajax(
{
type: "POST",
url: "Utilities/CheckUsername.php",
data: "un="+ un,
success: function(data)
{
if(data=="Username Does Not Exist")
{
$('#login').submit();
}
else
{
$('#mike').html(data);
}
}
});
});
});
</script>
</head>
<body>
<form name="login" id="login" method="post" action="dsds.html">
UserName<input type="text" name="username" id="username"value="">
<br/>
Password<input type="text" name="password" id="password" value="">
<br/>
Password Again<input type="text" name="passwordagain" id="passwordagain" value="">
<br/>
<input type="hidden" name="NewClass" id="NewClass" value="true">
<br/>
<input type="submit" name="submit" id="submitButton" value="submit">
</form>
<span id = "mike"></span>
答案 0 :(得分:0)
你的问题是你假设$ .ajax是一个同步函数,它不是。它不等待ajax调用在它进入下一个语句之前完成。这意味着,根据ajax调用的运行时间,可能会设置或不设置标志变量。事实上,它几乎肯定不会设置为2以外的任何东西,因为ajax调用的往返时间将比JS执行程序需要前进到if语句的时间长。
当你在if(flag == 1)处设置断点时,执行将停在那里并且ajax调用有时间完成,这就是为什么它在你设置断点时起作用但在你没有断点时不起作用的原因一个断点。我建议将代码修改为:
$("#loginButton").click(function(e) {
var un = $('#username').val();
$.ajax(
{
type: "POST",
url: "Utilities/CheckUsername.php",
data: "un="+ un,
success: function(data)
{
if(data=="Username Does Not Exist")
{
// code for handling an error;
}
else
{
$('#mike').html(data);
$('#loginForm').submit();
}
}
});
});
单击登录按钮时,ajax调用将执行用户名检查,并在检查完成后最终提交表单。