我有一个使用Ajax的jQuery函数。它总是返回undefined
,我可以找出原因。
我注意到,如果我警告$.post
功能中注册的变量,它会起作用,但如果我在外面尝试它则不会。
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;
}
答案 0 :(得分:3)
当你处理像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!');
});
答案 1 :(得分:2)
在代码完成运行之前,您正在警告变量。使用on success success函数而不是AJAX调用,当返回值时,您可以使用它。
目前,您还没有等待AJAX调用完成,您继续使用代码,这就是您未定义的原因