Y.G*_*G.J 3 javascript ajax jquery
这是我表格中支票的一部分
function check(theform) {
var re = /^\w[0-9A-Za-z]{5,19}$/;
if (!re.test(theform.username.value)) {
alert("not valid username");
theform.username.focus();
return false;
}
$.ajax({
type: "POST",
url: "username.asp",
data: "username="+theform.username.value,
success: function(msg){
username = msg;
if (!username) {
alert("username already in use");
return false;
}
}
});
var re = /^\w[0-9A-Za-z]{5,19}$/;
if (!re.test(theform.password.value)) {
alert("not valid password");
theform.password.focus();
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因进行同步...它检查用户名,然后用ajax复制用户名,而不是等待响应并跳转到密码检查.
我不想插入代码的其余部分isreadystate(或者是什么都),因为我可能会移动的用户名重复检查结束......然后该函数将前阿贾克斯结束反正
我该怎么办?
AJAX中的第一个A代表"Asynchonous".进行呼叫,并且继续执行该功能而不等待呼叫返回.
您可以async在通话中设置选项false,使您的通话同步.但是,您必须更改函数以return false使其完成check函数,并且jQuery手册不建议:
Ajax中的第一个字母代表"异步",意味着操作并行发生,并且无法保证完成的顺序.$ .ajax()的async选项默认为true,表示在发出请求后代码执行可以继续.将此选项设置为false(从而使调用不再异步)是强烈建议不要的,因为它可能导致浏览器无响应.
更好的方法是在函数内"实时"进行检查,然后启动Ajax请求,并在该请求的成功回调中提交表单.
第二次尝试同步通话.这似乎确实有效 - 在FF 3.6中测试过.
var name_success = true;
$.ajax({
type: "POST",
async: false,
url: "username.asp", // Needs to return "EXISTS" in this example
data: "username="+theform.username.value,
success: function(msg){
username = msg;
if (username == "EXISTS") { // Changed callback return value -
// safer this way
alert("username already in use");
name_success = false; // should work because
// we're in check()'s scope
return false;
}
}
});
alert (name_success);
Run Code Online (Sandbox Code Playgroud)