如何使用ajax刷新php代码而不自动检索外部文件

时间:2013-07-07 11:52:45

标签: php jquery mysql ajax database

我创建了一个php页面,从数据库中获取数据然后获取php文件的html页面并使用AJAX刷新它,但是我需要将php代码放在html文件中并刷新代码,这是我的代码从外部文件刷新div标签:

<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代码?

2 个答案:

答案 0 :(得分:2)

PHP代码由服务器执行。它永远不会到达浏览器,因此无法刷新它。您必须在服务器端重新执行PHP并重新加载页面。如果您无法通过JavaScript实现所需,那么页面重新加载是您唯一的选择。

答案 1 :(得分: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);
    }
}

不要复制&amp;糊!请注意,自jQuery发明以来,我没有使用原始Javascript进行AJAX调用,所以我的代码可能不太理想,或者右下方不正确。不过,它应该给你一般的想法。我也会使用JSON而不是逗号分隔列表。

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