Как сделать функцию для проверки значения, используя функции $ .post? - PullRequest
0 голосов
/ 24 июля 2011

Например:

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

1 голос
/ 24 июля 2011

Вы не можете сделать это таким образом ... Поскольку функция, которую вы передаете методу post, является обратным вызовом и выполняется при получении данных.

Вам необходимо создать функцию checkValid (value) которые делают post и обратный вызов post вызывает valueIsOk (значение), если data == 'true'

0 голосов
/ 24 июля 2011
$(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

вопрос не менялся, и код не проверен, но вы все равно можете попробовать

0 голосов
/ 24 июля 2011

Первая причина, по которой он вообще не работает, заключается в том, что вы не препятствуете отправке формы на yes.php.Я предлагаю вам изменить тип кнопки на «button», вызвать isValid с помощью «onclick» и, если он действителен, опубликовать на yes.php.

Или, возможно, более элегантным способом:

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

и удалите входной параметр в функции isValid и вместо этого определите значение Iamgood в самой функции.

0 голосов
/ 24 июля 2011

Я думаю, что вам, возможно, придется подумать о другом способе решения этой проблемы.Я не думаю, что это возможно, и примеры 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...