如何使用AJAX和PHP刷新div标签而不丢失发布的数据

时间:2013-07-20 21:35:01

标签: php javascript mysql ajax database

现在我有两页HTML页面,其中包含Ajax刷新div标签代码和使用$_POST从另一页面发布数据,第二页是从mysql表中选择数据的PHP页面,所以让我们看看代码我使用AJAX重新加载div标签:

function Ajax(){
var xmlHttp;
    try{    
        xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
    }
    catch (e){
        try{
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
        }
        catch (e){
            try{
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e){
                alert("No AJAX!?");
                return false;
            }
        }
    }

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

window.onload=function(){
    setTimeout('Ajax()',2000);
}

该代码重新加载此div标签<div id="ReloadThis"></div>并从data.php文件中获取并将其重新加载到此div标签中,这很棒但我的问题是在PHP文件中包含发布的数据时重新加载发布的数据会丢失并显示Undefined index。我在google上搜索了如何执行此操作,我发现在AJAX中使用$.post,因此$.post对此问题有用,如果是,那么我该如何使用它?

谢谢:)

1 个答案:

答案 0 :(得分:2)

HTTP是无状态协议,这意味着服务器不需要保存先前请求发送的数据。但是有很多方法 - 显然与HTTP无关 - 可以随时保存数据并在需要时检索它。

现在,如果我理解了正确的问题,那么您希望第二个请求中的数据可以返回到$ _POST。好吧,it won't be! $ _POST只保存发送给它的数据(通常来自表单或ajax),仅用于current请求。如果它不断向服务器请求保存结果,那么事情就会很快失控。您可以使用其他机制将数据从简单到有点难以保存:

  • $ _ GET:您可以使用url跨页面保存数据,并通过$ _GET数组访问它们。这应该很简单但非常麻烦,而不是推荐的数据持久性方法。
  • 会话变量:如上所述,您无法在$ _POST中为多个请求保存数据。但是你可以将数据保存在$ _SESSION中一段时间​​(这取决于你的配置,但是在干净的PHP安装上应该是大约24分钟see here)。您可以将该值更改为您想要的值see here。如果你想在facebook,gmail等中实现某种特定于用户的页面,会话变量通常很有用......从documentation获取更多关于会话的信息。
  • 文件:您可以将数据保存到Web服务器上的文件中,并在需要数据时读取这些文件。但大多数网络应用程序都很复杂,需要太多的结构,并且试图将这些复杂的数据放入自定义文件中,这太不方便了,这很疯狂。
  • 数据库:您已经提到了这一点,但如果您正确使用它,则不应该遇到太多麻烦。基本上,您从页面获取数据,并且您将在$ _POST中获得该数据(如果这是您正在使用的方法),那么save the data in a database(e.g. a mysql database).现在这是您的data.php所在的位置:{{1可能不会使用$ _POST!事实上你正在使用$ _GET。它必须获取您保存在数据库中的数据并将其发回给您。

这个答案超出了你原来的问题,因为好像你还没有足够的关于持久性的知识。关于data.php:它是一个jQuery方法,允许您使用$.post方法而不是通常的POST方法从服务器获取数据,但是GET这将是一些参数与数据库交互的脚本需要。有关详细信息,请参阅documentation


META

我没有给出任何代码示例来帮助您,因为您提供的代码示例无法供人们提供答案。由于您是新手,以下页面将有助于您提出更好的问题:

如果英语不是您的主要语言,您可以提及它并参与您的问题编辑,而其他人则试图改进它们。