我从我的jquery插件中删除了所有关于这个问题的逻辑,但我的问题是,当我调用我的函数checkValidationName时,它确实是这样,并将name =设置为true。然后当我尝试在我调用它之后比较它时,值为false。这是为什么?
(function($){
$.fn.validate = function() {
var name = false;
$('.submitBtn').click(function() {
$.fn.validate.checkValidationName(nameValues);
**console.log("name = "+name); **//but this prints out "false"****
//shouldn't this be true since name returned true in the actual function??
}
});
$.fn.validate.checkValidationName = function(id) {
$.post("PHP/submitButtonName.php", {checkValidation: id},
function(data) {
**console.log("name = "+name); **//this prints out "true"****
//name is equal to true here
}, "json");
};
}
})(jQuery);
答案 0 :(得分:1)
这是因为checkValidationName
中对$ .post()的调用是异步的。当您调用以下行...
$.fn.validate.checkValidationName(nameValues);
几乎立即执行下一行 - 很快就会得到$ .post()的结果,无论如何。
答案 1 :(得分:1)
那是因为AJAX请求是异步的,就在你调用checkValidationName
之后,它还没有完成。您需要在回调中进行比较。
您可以让checkValidationName
进行回调并在验证时调用结果:
(function($){
$('.submitBtn').click(function() {
$.fn.validate.checkValidationName(nameValues, function(valid) {
console.log(valid);
});
});
$.fn.validate.checkValidationName = function(id, callback) {
$.post("PHP/submitButtonName.php", {checkValidation: id},
function(data) {
var valid = data.foo; // or however you determine that
callback(valid); // call callback
}, "json");
};
}(jQuery));