我针对这个问题从我的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);

最佳答案

这是因为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));

09-25 20:30