带有返回未定义Ajax的jQuery函数
我有一个使用Ajax的jQuery函数。它总是返回未定义的,我可以找出原因 我注意到,如果我提醒在$.post函数中注册的变量,它会工作,但如果我在外部尝试它,它不会工作带有返回未定义Ajax的jQuery函数,jquery,ajax,post,undefined,Jquery,Ajax,Post,Undefined,我有一个使用Ajax的jQuery函数。它总是返回未定义的,我可以找出原因 我注意到,如果我提醒在$.post函数中注册的变量,它会工作,但如果我在外部尝试它,它不会工作 function signup(){ var username = $('#su-username').val(); var password = $('#su-password').val(); if(username!='' && password!=''){
function signup(){
var username = $('#su-username').val();
var password = $('#su-password').val();
if(username!='' && password!=''){
$.post("register.php", { user: username, pass: password }).done(function(response){
if($.trim(response)=='1'){
alert('Username Taken, Please choose another');
var registered = 0;
}else{
var registered = 1;
}
});
} else {
alert('Username and password cannot be empty');
var registered = 0;
}
return registered;
}
在代码完成运行之前,您将发出警告,发出该变量。使用on success函数代替AJAX调用,当返回值时,您可以使用它
目前,您不是在等待AJAX调用完成,而是在继续您的代码,这就是为什么您没有定义代码的原因。您是在代码运行完成之前发出变量警报。使用on success函数代替AJAX调用,当返回值时,您可以使用它
目前,您并不是在等待AJAX调用完成,而是在继续编写代码,这就是为什么在处理AJAX之类的异步操作时会出现未定义的问题。建议使用回调函数。例如:
function signup(callback) {
var username = $('#su-username').val(),
password = $('#su-password').val(),
registered = 0;
if (username != '' && password != '') {
$.post("register.php", { user: username, pass: password }).done(function(response) {
if ($.trim(response) == '1') {
alert('Username Taken, Please choose another');
}
else {
registered = 1;
}
// Delayed callback invocation after AJAX request
callback(registered);
});
}
else {
alert('Username and password cannot be empty');
callback(registered); // Immediate invocation of the callback function
}
}
signup(function(ok) {
if (ok) alert('Ok!');
else alert('Not ok!');
});
在处理AJAX等异步操作时,建议使用回调函数。例如:
function signup(callback) {
var username = $('#su-username').val(),
password = $('#su-password').val(),
registered = 0;
if (username != '' && password != '') {
$.post("register.php", { user: username, pass: password }).done(function(response) {
if ($.trim(response) == '1') {
alert('Username Taken, Please choose another');
}
else {
registered = 1;
}
// Delayed callback invocation after AJAX request
callback(registered);
});
}
else {
alert('Username and password cannot be empty');
callback(registered); // Immediate invocation of the callback function
}
}
signup(function(ok) {
if (ok) alert('Ok!');
else alert('Not ok!');
});
这不可能是真的,因为如果我试图注册一个已经被占用的用户名,我会收到“用户名被占用,请选择另一个”的警告;哪个与设置注册变量的if块在同一个if块中?好了,你需要在从AJAX调用接收到值后处理代码,请参阅@dfsq answer以获得一个好方法。这不可能是真的,因为如果我尝试注册一个已经使用的用户名,我会收到警告“Username take,请选择另一个”;哪个if块与设置注册变量的if块位于同一个if块中?好了,您需要在从AJAX调用接收到值后处理代码,请参阅@dfsq answer以获得一个好方法。