2009-12-07 110 views
2

这里是JavaScript:帮助从一个javascript调用PHP if语句

function checkusername() 
       { 
         var username = $("#username").val(); 
         $.post("usernamecheck.php", {'username':username}, 
           function (data){ 
             if(data == 'taken'){ 
               alert('taken'); 
               return false; 
             }else{ 
               alert('available'); 
               return true; 
             } 
           } 
         ); 
       } 

/** 
* @author GeekTantra 
* @date 20 September 2009 
*/ 
(function(jQuery){ 
    var ValidationErrors = new Array(); 
    jQuery.fn.validate = function(options){ 
     options = jQuery.extend({ 
      expression: "return true;", 
      message: "", 
      error_class: "ValidationErrors", 
      error_field_class: "ErrorField", 
     success_field_class: "SuccessField", 
      live: true 
     }, options); 
     var SelfID = jQuery(this).attr("id"); 
     var unix_time = new Date(); 
     unix_time = parseInt(unix_time.getTime()/1000); 
     if (!jQuery(this).parents('form:first').attr("id")) { 
      jQuery(this).parents('form:first').attr("id", "Form_" + unix_time); 
     } 
     var FormID = jQuery(this).parents('form:first').attr("id"); 
     if (!((typeof(ValidationErrors[FormID]) == 'object') && (ValidationErrors[FormID] instanceof Array))) { 
      ValidationErrors[FormID] = new Array(); 
     } 
     if (options['live']) { 
      if (jQuery(this).find('input').length > 0) { 
       jQuery(this).find('input').bind('blur', function(){ 
        if (validate_field("#" + SelfID, options)) { 
         if (options.callback_success) 
          options.callback_success(this); 
        } 
        else { 
         if (options.callback_failure) 
          options.callback_failure(this); 
        } 
       }); 
       jQuery(this).find('input').bind('focus keypress click', function(){ 
        jQuery("#" + SelfID).next('.' + options['error_class']).remove(); 
        jQuery("#" + SelfID).removeClass(options['error_field_class']); 
       }); 
      } 
      else { 
       jQuery(this).bind('blur', function(){ 
        validate_field(this); 
       }); 
       jQuery(this).bind('focus keypress', function(){ 
        jQuery(this).next('.' + options['error_class']).fadeOut("fast", function(){ 
         jQuery(this).remove(); 
        }); 
        jQuery(this).removeClass(options['error_field_class']); 
       }); 
      } 
     } 
     jQuery(this).parents("form").submit(function(){ 
      if (validate_field('#' + SelfID)) 
       return true; 
      else 
       return false; 
     }); 
     function validate_field(id){ 
      var self = jQuery(id).attr("id"); 
      var expression = 'function Validate(){' + options['expression'].replace(/VAL/g, 'jQuery(\'#' + self + '\').val()') + '} Validate()'; 
      var validation_state = eval(expression); 
      if (!validation_state) { 
       if (jQuery(id).next('.' + options['error_class']).length == 0) { 
        jQuery(id).after('<span class="' + options['error_class'] + '">' + options['message'] + '</span>'); 
        jQuery(id).addClass(options['error_field_class']); 
     } 
       if (ValidationErrors[FormID].join("|").search(id) == -1) 
        ValidationErrors[FormID].push(id); 
       return false; 
      } 
      else { 
       for (var i = 0; i < ValidationErrors[FormID].length; i++) { 
        if (ValidationErrors[FormID][i] == id) 
         ValidationErrors[FormID].splice(i, 1); 
       } 
       jQuery(id).addClass(options['success_field_class']); 
       return true; 
      } 
     } 
    }; 
    jQuery.fn.validated = function(callback){ 
     jQuery(this).each(function(){ 
      if (this.tagName == "FORM") { 
       jQuery(this).submit(function(){ 
        if (ValidationErrors[jQuery(this).attr("id")].length == 0) 
         callback(); 
        return false; 
       }); 
      } 
     }); 
    }; 
})(jQuery); 

这里是usernamecheck.php:

<?php 
    $username = $_POST['username']; 
    if($username == 'asdf'){ 
     echo "taken"; 
    }else{ 
     echo "available"; 
    } 

?> 

这里是register.php的相关章节:

<script type="text/javascript"> 
       jQuery(function(){ 

      jQuery("#username").validate({ 
       expression: "if (VAL.length > 2 && VAL.length < 13 && VAL && checkusername()) return true; else return false;", 
       message: "Please enter a valid username between 3 and 12 characters long. If you have that username is taken.", 
      }); 

实际验证工作正常,如果我输入asdfg我得到一个消息框说“可用”,如果我输入asdf我得到一个消息框说'采取'。然而,无论如何,jquery显示消息。

回答

2

问题是checkusername()实际上并没有返回true或false。您添加到$.post()的回调函数确实如此,但这不会是checkusername()的返回值。实际上,checkusername()将立即返回,而不会等待您的发布请求的结果,因为这是回调函数的用途。

编辑:

一个解决办法是,如果验证在你的回调无法显示弹出消息。 快速谷歌可以给你几个examples

+0

谢谢。我将如何解决这个问题?我尝试使用ifTrue,但我似乎无法得到它的工作。 – hrickards 2009-12-07 18:22:05

+0

在链接中使用另一个示例了解它的工作情况。谢谢你的帮助! – hrickards 2009-12-07 18:46:48