2013-07-07 92 views
0

我创建一个PHP页面,从一个表从数据库中,然后HTML页面得到的PHP文件,并使用AJAX刷新获取数据,但我需要把在HTML文件中的PHP代码,并刷新代码,这是我的代码,刷新div标签从外部文件:如何使用AJAX没有取回外部文件刷新PHP代码自动

<script> 
function Ajax(){ 
var xmlHttp; 
    try{  
     xmlHttp=new XMLHttpRequest(); 
    } 
    catch (e){ 
     try{ 
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
     } 
     catch (e){ 
      try{ 
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      catch (e){ 
       alert("Oops!"); 
       return false; 
      } 
     } 
    } 

xmlHttp.onreadystatechange=function(){ 
    if(xmlHttp.readyState==4){ 
     document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText; 
     setTimeout('Ajax()',2000); 
    } 
} 
xmlHttp.open("GET","see.php",true); 
xmlHttp.send(null); 
} 

window.onload=function(){ 
    setTimeout('Ajax()',2000); 
} 
</script> 
<div id="ReloadThis"></div> 

但我想刷新特定的PHP代码在同一个页面,例如:

<script> 
    function Ajax(){ 
    var xmlHttp; 
     try{  
      xmlHttp=new XMLHttpRequest(); 
     } 
     catch (e){ 
      try{ 
       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e){ 
       try{ 
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e){ 
        alert("Oops!"); 
        return false; 
       } 
      } 
     } 

    xmlHttp.onreadystatechange=function(){ 
     if(xmlHttp.readyState==4){ 
      document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText; 
      setTimeout('Ajax()',2000); 
     } 
    } 
    xmlHttp.open("GET","see.php",true); 
    xmlHttp.send(null); 
    } 

    window.onload=function(){ 
     setTimeout('Ajax()',2000); 
    } 
    </script> 

<?php 
$txt = $_POST['text']; 
$sql = mysql_query("SELECT * FROM `table`WHERE `id` = '$txt'"); 
while($fetch = mysql_fetch_array($sql)){ 
$names = $fetch['name']; 
echo $names; 
echo "</br>"; 
} 
?> 

我怎么能刷新PHP代码,而它在同一个页面?

回答

0

将PHP代码移至单独的文件并使用AJAX调用它。 PHP代码可以用一个名称列表进行响应。 AJAX回调函数应该处理重新填充需要更新的页面部分。

您的代码,因为它的立场,是开放的SQL注入攻击。请参阅How can I prevent SQL injection in PHP?此外,mysql_ *函数已被弃用,因此建议您使用migrate to mysqli functionsPDO

例PHP代码(未经测试):

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$txt = $mysqli->real_escape_string($_POST['text']); 

$mysqli->query("SELECT * FROM `table` WHERE `id` = '$txt'"); 

$names = array(); 
while($fetch = mysqli->fetch_array($sql)) { 
    $names[] = $fetch['name']; 
} 

echo header('Content-type: text/plain'); 
echo implode(',', $names); 

这将返回名称的简单逗号分隔的列表。

例AJAX回调例程(未经测试):

xmlHttp.onreadystatechange=function(){ 
    if(xmlHttp.readyState==4){ 
     var resp = xmlHttp.responseText; 
     var names = resp.split(","); 
     var htmlString = ""; 

     for (var i = 0; i < names.length; i++) { 
      htmlString += names[i] + "<br/>"; 
     } 

     document.getElementById('ReloadThis').innerHTML=htmlString; 
     setTimeout('Ajax()',2000); 
    } 
} 

禁止复制& PASTE!请注意,自发明以来,我没有使用原始的Javascript进行AJAX调用,因此我的代码可能不太理想,或者右键不正确。不过,它应该给你一个总体思路。我也会使用JSON而不是逗号分隔列表。

我希望这能回答你的问题。如果我误解了你的问题,请告诉我。

2

PHP代码由服务器执行。它永远不会到达浏览器,因此无法刷新它。您将不得不重新执行服务器端的PHP并重新加载页面。如果你无法用JavaScript实现你想要的,页面重新加载是你唯一的选择。