doumi9661
2013-04-09 07:16
浏览 49
已采纳

php:如何使用jquery ajax验证文本框

I have a textbox, i would like to validate it using jquery-ajax once user focusout from that textbox.

Validation include:

  • Server side, value goes to the php page and i have to validate it

  • if validation success,show alert("succes"); else if error alert("failed");

I have doubt how jquery ajax will show alert("failure"); Till now , i have only done for success.

I know only the below mention code,furthure what should i do to solve my problem? please help

<script type="text/javascript">
    $(function()
    {
        $('input[id^="datepicker"]').on('focusout',function()
        { 
             $.ajax({
                url: "ajax_frmdate_validation.php?txtval="+$(this).val(),
                success: function(data){
                    alert('Successfully  ...');
                }
            });

        });
    });
</script>

--------------
--------------
<input class="plain" name="frmdate"   value="" size="25" id="datepicker" /> 

And my server side php code is:

$txtval =$_REQUEST['txtval'];
$fromTimestamp = strtotime( $txtval); 
//---------My Logic Code Goes Here -----------------------------
$sid=$_SESSION['id'];
$result12=mysql_query("SELECT * FROM budget where creater_id = '$sid'");
$num_rows = mysql_num_rows($result12);

if($num_rows>0)//check if empty or not
{
    while($test12 = mysql_fetch_array($result12)) {
        $from_date = strtotime($test12['from_date']);//getting all the FROM-Dates_column
        $to_date = strtotime($test12['to_date']);//getting all the TO-Dates_column

        if(isset($to_date) && isset($from_date)) {
            if((($fromTimestamp >= $from_date) && ($fromTimestamp <= $to_date)) || (($toTimestamp >= $from_date) && ($toTimestamp <= $to_date))) {
                $val = 'Y'; //return Y in meet this condition
            }
            else {
                $val = 'N'; // return N if meet this condition
            }
        }
        //---------------------Result of my logic code---------------------------------
        if($val == 'Y') //Returns TRUE
        {
            //VALIDATION FAILS - Returns Validation Error
            break;
        }
        else  if($val == 'N') {
            //VALIDATION TRUE - Returns Validation Error
        }
    }
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • dongyumiao5210 2013-04-09 07:23
    已采纳

    You can do this way:

    $txtval = mysql_real_escape_string($_REQUEST['txtval']);
    $fromTimestamp = strtotime( $txtval); 
     //---------My Logic Code Goes Here -----------------------------
     $sid=$_SESSION['id'];
     $result12=mysql_query("SELECT * FROM budget where creater_id = '$sid'");
     $num_rows = mysql_num_rows($result12);
    
     if($num_rows>0)//check if empty or not
     {
        while($test12 = mysql_fetch_array($result12)) {
        $from_date = strtotime($test12['from_date']);//getting all the FROM-Dates_column
        $to_date = strtotime($test12['to_date']);//getting all the TO-Dates_column
    
        if(isset($to_date) && isset($from_date)) {
             if((($fromTimestamp >= $from_date) && ($fromTimestamp <= $to_date)) || (($toTimestamp >= $from_date) && ($toTimestamp <= $to_date))) {
                 $val = 'Y'; //return Y in meet this condition
             }
             else {
                $val = 'N'; // return N if meet this condition
             }
         }
         //---------------------Result of my logic code---------------------------------
         if($val == 'Y') //Returns TRUE
         {
            echo "failed";
            exit();
         }
         else  if($val == 'N') 
         {
            echo "success";
            exit();
         }
    

    Now in your ajax call:

    <script type="text/javascript">
        $(function()
        {
           $('input[id^="datepicker"]').on('focusout',function()
           { 
             $.ajax({
                url: "ajax_frmdate_validation.php?txtval="+$(this).val(),
                success: function(data){
                   if (data == 'success') {
                        alert("Successfully validated"); 
                   } else {
                        alert("Failed");
                        return false;
                   }
                }
            });
    
          });
       });
    </script>
    

    Rather than alerting, a better way will be to show the error message below the textbox by appending the message if it is failed.

    Also do proper escaping before you do the checking using mysql_real_escape_string

    UPDATE :

    You need to call the ajax whenever the date changes in the input text field, so instead of focusout you can use onSelect from datepicker. So when a new date is selected an ajax call will be initiated.

    So instead of calling the earlier ajax on focusout you can call on onSelect of datepicker

    $(function(){
        $('#datepicker').datepicker({
            onSelect:function(date,instance){
               $.ajax({
                  url: "ajax_frmdate_validation.php?txtval="+date,
                  success: function(data){
                     if (data == 'success') {
                        alert("Successfully validated"); 
                     } else {
                        alert("Failed");
                        return false;
                     }
                  }
               });
            }
        });
    }); 
    

    NEW UPDATE

    Try with this :

     <script type="text/javascript">
         $(document).ready(function() { 
           $("#datepicker").datepicker({ 
              dateFormat: "yy-mm-dd" ,
              onSelect:function(date,instance){
                              $.ajax({
                                url: "ajax_frmdate_validation.php?txtval="+date,
                                success: function(data){
                                if (data == 'success') {
                                     alert("Successfully validated"); 
                                } else {
                                     alert("Failed");
                                      return false;
                                }
                         }
                     });
                }
         }); 
      }); 
     </script>
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • douhan0562 2013-04-09 07:22

    its easy use

     if($val == 'Y') //Returns TRUE
                {
                    echo 'success';
                }
                else  if($val == 'N') {
                    echo 'fail';
                }exit;
    

    you will get this success/fail in the data param of your success call back.

    评论
    解决 无用
    打赏 举报
  • dqrl3595 2013-04-09 07:22

    Your php code will be

    if($val == 'Y') //Returns TRUE
                {
                  echo "Success";   
                 //VALIDATION FAILS - Returns Validation Error
                    break;
                }
                else  if($val == 'N') {
                  echo "Fail";   
                    //VALIDATION TRUE - Returns Validation Error
                }
    

    And In JS

    $.ajax({
                               url: "ajax_frmdate_validation.php?txtval="+$(this).val(),
                               success: function(data){
                                          if(data == "Success")
                                            alert("success");
                                          if(data == "Fail")
                                            alert("Fail");
    
                               }
                             });
    
    评论
    解决 无用
    打赏 举报
  • duanduan8439 2013-04-09 07:23

    Until and unless you set the HTTP Response as an error code , ajax will not callback to fail: function.

    An easy way to do is , send a JSON string back from the server side even if validation fails or is a success as shown in the format below.

    If validation is a success

     {'status':'OK','message':'Validation success'}
    

    If validation is a failure

    {'status':'NOK','message':'Please enter your name'}
    

    Now you can get this JSON string in the success callback and take appropriate action.

    评论
    解决 无用
    打赏 举报
  • douxue4395 2013-04-09 07:23

    Change

    if($val == 'Y') //Returns TRUE
    {
        //VALIDATION FAILS - Returns Validation Error
        break;
    }
    else  if($val == 'N') {
        //VALIDATION TRUE - Returns Validation Error
    }
    

    into

    echo $val;
    

    Then in your js simply grab response and do alert msg:

    success: function(data){
        if (data == 'Y') {
            alert('Successfully  ...');
        } else {
            alert('Oh no...');
        }
    }
    
    评论
    解决 无用
    打赏 举报
  • du8442 2013-04-09 07:23

    you can use ajax type and data option to send the data instead of passing it through url.

     $.ajax({
               url: "ajax_frmdate_validation.php",
               type:'GET',
               data:{"txtval":$(this).val()},
               success: function(data){
                     if(data=="success"){
                       alert('successful');
                     }else{
                        alert('error');
                     }
                }
             });
    

    and you serverside code include this

      if($val == 'Y') //Returns TRUE
            {
               echo "success"
                break;
            }
            else  if($val == 'N') {
                 echo "error";
                 break;
            }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题