【问题标题】:How to refresh a php code using ajax without retrieve an external file automatically如何使用 ajax 刷新 php 代码而不自动检索外部文件
【发布时间】:2013-07-04 21:58:38
【问题描述】:

我创建了一个 php 页面,它从数据库中的表中获取数据,然后是 html 页面,该页面获取 php 文件并使用 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 jquery mysql ajax database


    【解决方案1】:

    将 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);
        }
    }
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 2014-01-14
        • 1970-01-01
        • 2015-11-15
        • 2020-09-16
        • 1970-01-01
        • 2013-09-27
        • 2011-12-29
        • 2016-03-26
        相关资源
        最近更新 更多