【问题标题】:php: how to validate textbox using jquery ajaxphp:如何使用 jquery ajax 验证文本框
【发布时间】:2013-04-09 07:16:56
【问题描述】:

我有一个文本框,一旦用户从该文本框移出焦点,我想使用 jquery-ajax 对其进行验证。

验证包括:

  • 服务器端,值转到 php 页面,我必须对其进行验证

  • 如果验证成功,则显示警报(“成功”); else if error alert("failed");

我怀疑 jquery ajax 将如何显示 alert("failure");到现在为止,我所做的一切都是为了成功。

我只知道下面提到的代码,我应该怎么做才能解决我的问题?请帮忙

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

而我的服务器端 php 代码是:

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

【问题讨论】:

  • 只是从服务器返回错误信息并在成功函数中提醒它
  • @Sabari 请将其作为答案发布,并使用少量代码作为参考
  • 只是题外话。但是至少使用mysql_real_escape_string() 来逃避这个查询$result12=mysql_query("SELECT * FROM budget where creater_id = '$sid'");
  • @user2180861 完成。请检查

标签: php javascript jquery ajax


【解决方案1】:

改变

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

进入

echo $val;

然后在您的 js 中简单地获取响应并发出警报消息:

success: function(data){
    if (data == 'Y') {
        alert('Successfully  ...');
    } else {
        alert('Oh no...');
    }
}

【讨论】:

    【解决方案2】:

    你可以这样做:

    $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();
         }
    

    现在在您的 ajax 调用中:

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

    如果失败,更好的方法是通过附加消息在文本框下方显示错误消息,而不是警告。

    在使用mysql_real_escape_string进行检查之前,还要进行适当的转义

    更新

    您需要在输入文本字段中的日期更改时调用 ajax,因此您可以使用 datepicker 中的 onSelect 而不是 focusout。 So when a new date is selected an ajax call will be initiated.

    因此,您可以调用 datepicker 的 onSelect,而不是在 focusout 上调用早期的 ajax

    $(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;
                     }
                  }
               });
            }
        });
    }); 
    

    新更新

    试试这个:

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

    【讨论】:

    • @user2180861 希望对你有帮助
    • 上面我向你展示了事件focusout。而且,我的文本框正在从日历中获取输入(当用户关注文本框时,jquery 日历会打开)。那么根据我的要求,jquery的哪个事件适合这个呢?
    • @user2180861 我不清楚你的意思。您用于文本框的事件焦点对您的要求是正确的
    • 我有一个文本框,当我点击它时。一个 j-query 日历正在打开。所以对于这种情况,我使用了focusout 事件。但是focusout 似乎不太好。你能建议我在这种情况下使用哪个事件吗??
    • @user2180861 请检查我的更新。希望这是你需要的
    【解决方案3】:

    简单易用

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

    您将在success 回调的data 参数中获得此成功/失败。

    【讨论】:

      【解决方案4】:

      你的 php 代码将是

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

      在 JS 中

      $.ajax({
                                 url: "ajax_frmdate_validation.php?txtval="+$(this).val(),
                                 success: function(data){
                                            if(data == "Success")
                                              alert("success");
                                            if(data == "Fail")
                                              alert("Fail");
      
                                 }
                               });
      

      【讨论】:

        【解决方案5】:

        除非您将 HTTP 响应设置为错误代码,否则 ajax 不会回调失败:函数。

        一个简单的方法是,即使验证失败或成功,也从服务器端返回一个 JSON 字符串,如下面的格式所示。

        如果验证成功

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

        如果验证失败

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

        现在您可以在成功回调中获取此 JSON 字符串并采取适当的措施。

        【讨论】:

          【解决方案6】:

          您可以使用 ajax typedata 选项来发送数据,而不是通过 url 传递。

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

          你的服务器端代码包含这个

            if($val == 'Y') //Returns TRUE
                  {
                     echo "success"
                      break;
                  }
                  else  if($val == 'N') {
                       echo "error";
                       break;
                  }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多