0

基本上,我试图在使用 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 中调用 Javascript 函数echo <script>alert()</script>

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

任何帮助,将不胜感激。

4

3 回答 3

0

尝试这个:

   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.';
   }        
于 2013-08-09T00:30:12.960 回答
0

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

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

于 2013-08-09T00:31:14.343 回答
0

尝试改变你的回声"<script>alert('Hello Tom, Welcome Back')</script>";

只是'Hello Tom, Welcome Back';

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

您将不得不更改您的 javascript 以检查返回的内容,以便您知道调用 thealert或 the document.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>
于 2013-08-09T01:27:29.027 回答