【问题标题】:Ajax + PHP validation and call Javascript function inside PHP validationAjax + PHP 验证并在 PHP 验证中调用 Javascript 函数
【发布时间】:2013-08-09 00:23:14
【问题描述】:

基本上,我在使用 Ajax 时尝试在 PHP 脚本中调用 Javascript 函数。

JavaScript:

<script type="text/javascript">
    function Validate() {
        hr = new XMLHttpRequest();
        name = document.getElementById('name').value;

        hr.open('POST', 'validator.php', true);
        hr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

        hr.onreadystatechange = function() {
            if ( hr.readyState == 4 && hr.status == 200 ) {
                document.getElementById('message').innerHTML = hr.responseText;
            }
        }
        hr.send('name=' + name);
    }

    function disable() {
        document.getElementById('message').innerHTML = '';
    }
</script>

HTML:

<div id="message"></div>
Name: <input type="text" id="name /">
<input type="button" onclick="Validate();" value="Validate" />

PHP:

<?php    
   $name = $_POST['name'];    
   if ( !empty( $name ) ) {
       if ( $name == 'Tom' ) {
           echo "<script>alert('Hello Tom, Welcome Back')</script>";
       } else {
           echo 'You are not Tom';
       }
   } else {
       echo 'Please enter a name.';
   }
?>

除了在 PHP echo &lt;script&gt;alert()&lt;/script&gt; 中调用 Javascript 函数外,一切正常

我认为这里的问题是因为我声明了hr.responseText,结果,我要显示的javascript返回了文本。但是我应该怎么做才能解决这个问题呢?

任何帮助将不胜感激。

【问题讨论】:

    标签: php javascript jquery ajax validation


    【解决方案1】:

    尝试将您的回声从"&lt;script&gt;alert('Hello Tom, Welcome Back')&lt;/script&gt;";更改为

    只给'Hello Tom, Welcome Back';

    然后在你的javascript中你可以调用alert(hr.responseText);

    您必须更改您的 javascript 以检查返回的内容,以便您知道调用 alertdocument.getElementById('message').innerHTML = hr.responseText;

    编辑:我将添加所有更改的代码...

    <?php
    
    $name = $_POST['name'];
    
    if(!empty($name)){
      if($name == 'Tom'){
       echo 'Hello Tom, Welcome Back';
    }else{
        echo 'You are not Tom';
    }
    }else{
      echo 'Please enter a name.';
    }
     ?>
    

    Javascript

    <script type="text/javascript">
    function Validate(){
       hr = new XMLHttpRequest();
       name = document.getElementById('name').value;
    
    hr.open('POST', 'validator.php', true);
    hr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
    hr.onreadystatechange = function(){
      if(hr.readyState == 4 && hr.status == 200){
       response = hr.responseText.replace(/^\s+|\s+$/g,'');  //remove whitespace so you can compare
       if (response == ("You are not Tom") || response == ("Please enter a name."))
         {
         document.getElementById('message').innerHTML = hr.responseText;
         }
         else {  
           alert(hr.responseText);
        }
        }
    }
    hr.send('name=' + name);
    }
    
    function disable(){
       document.getElementById('message').innerHTML = '';
    }
    </script>
    

    【讨论】:

    • 谢谢!我自己真的想通了!而不是response == ('You are not Tom'),我只是在PHP中$name=='Tom'时回显'ok',然后在Javascript中if(hr.response == 'ok')然后执行alert()
    【解决方案2】:

    试试这个:

       function do_alert($msg){
                echo '<script type="text/javascript">alert("' . $msg . '"); </script>';
       }
       if(!empty($name)){
             if($name == 'Tom'){
                 do_alert("You are tom");
              }else{
                 do_alert("You are not tom");
              }
      }else{
             echo 'Please enter a name.';
       }        
    

    【讨论】:

    • 这个不行,没有输入时只返回“请输入姓名”。
    • nothing is entered ?你的意思是 $name 是空的?因为如果是这种情况,那么它可能会回显,因为nothing is entered 对吗?
    • 是的,当 $name 为空时。但是当 $name == 'Tom' 时,警报不会出现
    • 这对我也不起作用。如果你愿意,你可以尝试在你的函数 validate 中验证它。
    【解决方案3】:

    你没有标记jQuery,但如果你正在使用它,$.getScript 可能就是你想要的。

    除此之外,最好将脚本构建到原始文档中,然后根据响应文本执行这个或那个函数。

    【讨论】:

    • 但我希望所有验证都在服务器端完成,因为它更安全?编辑:我相信我在这里没有使用任何 jQuery :/?
    • 按照我的想象,它仍然是。你的反应会有所不同;验证将是相同的。客户端上发生的事情将是您处理响应的方式。
    • 好吧,忘记 jQuery。 ;-)
    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多