首先,我已经阅读了这些主题jQuery AJAX function return true or false returning only false while its all good,What to return for jQuery's ajax data param in callback function?,How return true or false function of data response ajax?,而我无法弄清楚如何使其发挥作用。
$("#btn_go").on('click', function(){
if(validateUserDetails() == false){
return;
}
});
因此,函数validateUserDetails
具有以下内容:
function validateUserDetails(){
var bool = false;
$.ajax({
url: 'response.php?type=validateUserDetails',
type: 'POST',
dataType: 'json',
data: {name: $("#checkout_name").val(), email: $("#checkout_email").val(), "country": $("#checkout_country").val(),
"city": $("#checkout_city").val()},
success: function(data){
console.log(data); // this is currently returning FALSE
// Which is totally correct!
if(data == true){ bool = true; }
return trueOrFalse(bool);
}
});
}
function trueOrFalse(bool){
return bool;
}
但这不起作用,因为如果我输出函数我得到“未定义”,这意味着该函数没有重新调整正确的值。 console.log(validateUserDetails()); // = undefined
我在做什么?
答案 0 :(得分:12)
ajax
请求为asynchronous
。不要使用sync: true
选项,这不是一个好主意。
你可以做的是使用promise
返回的ajax
,所以:
function validateUserDetails(){
return $.ajax({
url: 'response.php?type=validateUserDetails',
type: 'POST',
async: false,
dataType: 'json',
data: {name: $("#checkout_name").val(), email: $("#checkout_email").val(), "country": $("#checkout_country").val(),
"city": $("#checkout_city").val()},
success: function(data){
console.log(data); // this is currently returning FALSE
}
});
}
$("#btn_go").on('click', function(){
validateUserDetails().done(function(data){
if(data == "someValue")
return "whatever you want";
});
});
答案 1 :(得分:5)
由于还没有人回答,我会:
首先,您可以尝试同步请求
function validateUserDetails() {
var bool = false;
$.ajax({
url: 'response.php?type=validateUserDetails',
type: 'POST',
async: false,
dataType: 'json',
data: {name: $("#checkout_name").val(), email: $("#checkout_email").val(), "country": $("#checkout_country").val(), "city": $("#checkout_city").val()},
success: function(data) {
console.log(data); // this is currently returning FALSE
// Which is totally correct!
if (data == true) {
bool = true;
}
}
});
return trueOrFalse(bool);
}
如果不可接受,您可以使用$.Deferred()
function validateUserDetails() {
var deferred = $.Deferred();
var bool = false;
$.ajax({
url: 'response.php?type=validateUserDetails',
type: 'POST',
dataType: 'json',
data: {name: $("#checkout_name").val(), email: $("#checkout_email").val(), "country": $("#checkout_country").val(), "city": $("#checkout_city").val()},
success: function(data) {
console.log(data); // this is currently returning FALSE
// Which is totally correct!
if (data == true) {
bool = true;
}
}
complete: function () {
deferred.resolve(trueOrFalse(bool));
}
});
return deferred.promise();
}
function trueOrFalse(bool){
return bool;
}
function test() {
var promise = validateUserDetails();
promise.done(function(result) {
console.log("Bool: " + result);
});
}
答案 2 :(得分:1)
你的函数validateUserDetails没有返回值,她只是执行一个异步函数。 异步函数返回true或false,但没有用于捕获它。
就是这样:
function validateUserDetails(){
// asynchronous function
$.ajax({...});
return undefined;
}
如果您尝试console.log(trueOrFalse(bool));
,您将看到“true”或“false”,但您不能将“return”用于异步函数。你必须对成功函数做一些事情,使用“数据”(日志或其他函数)