如何使用$ .post函数执行函数验证值?

时间:2011-07-24 01:30:13

标签: javascript jquery html ajax post

例如:

<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>

4 个答案:

答案 0 :(得分:1)

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

如果data =='true',你必须创建一个函数checkValid(value)来执行post和post回调调用valueIsOk(value)

答案 1 :(得分:0)

我认为您必须考虑采用不同的方法来解决这个问题。我不认为这是可能的,并且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>

答案 2 :(得分:0)

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

或许是一种更优雅的方式:

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

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

答案 3 :(得分:0)

$(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";

<强> P.S

这个问题对我来说并不明显,而且代码未经测试但仍可以尝试