【问题标题】:How to do a function to validate a value using $.post functions?如何使用 $.post 函数执行验证值的函数?
【发布时间】:2013-11-03 07:15:01
【问题描述】:

例如:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>    
<script type="text/javascript">
    $(document).ready( function() {
        function is_valid( value )
        {
           // This is what I want to do, but this doesn't works.
           return value == "Iamgood" && $.post( 'validatefield.php', 'fieldvalue=' + value, function (data) { 
                 return data == "true";
           });
        } 

        $('#formtovalidate').bind( 'submit', function() {
            if (is_valid( $('#field').val() ) return true;
            return false;
        });
    });
    </script>
<form id="formtovalidate" action="yes.php">
  <input value="Iamgood" id="field" name="field"/>
  <input type="submit" id="sendform" value="Send" />
</form>

【问题讨论】:

    标签: javascript jquery html ajax post


    【解决方案1】:

    你不能那样做......因为你传递给 post 方法的函数是一个回调,它在接收到数据时执行。

    你必须创建一个函数 checkValid(value) 来执行 post 并且 post 回调调用 valueIsOk(value) if data == 'true'

    【讨论】:

    • 是的,我会这样做:总是从“正常”提交函数返回 false,并让 post 回调执行数据的实际保存(一旦经过验证) .
    【解决方案2】:

    它根本不起作用的第一个原因是因为您没有阻止将表单发布到 yes.php。我建议您将按钮的类型更改为“按钮”,使用“onclick”调用 isValid,如果有效,则发布到 yes.php。

    或者更优雅的方式:

      <input type="submit" id="sendform" value="Send" onclick="javascript: return isValid()" />
    

    并删除 isValid 函数中的输入参数,而是在函数本身中确定“Iamgood”的值。

    【讨论】:

      【解决方案3】:
      $(document).ready( function() {
              function is_valid( value )
              {
                 var returnval;
                 // use $.ajax instead and use async:false (not a good practice)
                 $.post( 'validatefield.php', {fieldvalue:value}, function (data) { 
                       if(data)
                          returnval="true";
                       else
                          returnval = "false";
                 });
                if(returnval)
                { 
                 switch (returnval)
                   {
                    case "true":
                     return true;
                    break;
                    case "false":
                     return false;
                     break;                
      
                    }                
                }
               else
                return false;
              } 
      
              $('#formtovalidate').bind( 'submit', function(e) {
                  e.preventDefault();
                  if (is_valid( $('#field').val() ) return true;
                  else
                  return false;
              });
          });
      

      在你的php文件中做

      $value = $_POST['fieldvalue'];
      //do processing
      if($value)
       echo "true";
      
      else
       echo "false";
      

      附言

      问题对我来说不是很清楚,代码未经测试,但您仍然可以尝试

      【讨论】:

        【解决方案4】:

        我认为您可能不得不考虑另一种方法来解决这个问题。我认为这是不可能的,并且 jQuery 示例 (http://api.jquery.com/jQuery.post/) 似乎同意这一点。该函数是异步的 - 它是一个回调,因此只要返回结果就会执行它(假设它是)。我没有尝试过,但我看到了一些你可以尝试的东西:

        试着把它放在你的 $.post 调用之前:

        $.ajaxSetup({async:false});
        

        您愿意接受其他方式吗?我不知道你的情况,所以这可能有效,也可能无效:

        <script type="text/javascript">
        $(document).ready( function() {
            var isValid = false;
            var postValid = false;
            function is_valid( value )
            {
                if (value == "Iamgood") isValid = true;
                $.post( 'validatefield.php', 'fieldvalue=' + value, function (data) { 
                    postValid = true;
                    $('#formtovalidate').submit();
                });
            } 
        
            $('#formtovalidate').bind( 'submit', function() {
                if (!isValid || !postValid) {
                    is_valid( $('#field').val() );
                    return false;
                } else return true;
            });
        });
        </script>
        <form id="formtovalidate" action="yes.php">
          <input value="Iamgood" id="field" name="field"/>
          <input type="submit" id="sendform" value="Send" />
        </form>
        

        【讨论】:

          猜你喜欢
          • 2023-03-16
          • 2012-10-21
          • 1970-01-01
          • 2014-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-12
          相关资源
          最近更新 更多