繁体   English   中英

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

[英]How to refresh a php code using ajax without retrieve an external file automatically

我创建了一个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代码?

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

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

您的代码现在可以接受SQL注入攻击。 请参阅如何在PHP中阻止SQL注入? 此外,不推荐使用mysql_ *函数,因此建议您迁移到mysqli函数PDO

示例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);
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM