【问题标题】:How to refresh a div tag without losing the posted data using AJAX and PHP如何使用 AJAX 和 PHP 在不丢失已发布数据的情况下刷新 div 标签
【发布时间】:2013-07-19 23:15:51
【问题描述】:

现在我得到了两页 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。我在谷歌上搜索了如何做到这一点,我发现在 AJAX 中使用$.post,那么$.post 对这个问题有用吗,如果是,我该如何使用它?

谢谢:)

【问题讨论】:

  • 您正在使用本机 javascript XMLHttpRequest 对象。 $.postjQuery的语法,是一个JS框架。
  • 也许我很累,但我很难理解问题的上下文和内容:您想在发布某些内容后从data.php 检索数据吗?此外,您的代码似乎有一个不断调用自身的函数。最后就像 Chris 提到的,如果你花时间学习 jQuery,这将是一项回报丰厚的投资。让我通过传递 HTTP 是无状态的,这意味着每次您向服务器发送请求时,不要期望上次请求中的值可用,除非您以某种方式明确保存它们。
  • @nt.bas 是的,正是我的问题的内容,以便在发布某些内容后从 data.php 中检索数据
  • 好的。因此,我认为您希望$_POST 变量在某些页面向其发出发布请求时保留在 php 脚本中,然后您希望能够在发出此GET 请求时检索该数据,对吗?显然这不起作用,因为变量没有保存在任何地方。一个简单的解决方法可能是session variables。否则$.post 会像@Chris 建议的那样派上用场。

标签: php javascript mysql ajax database


【解决方案1】:

HTTP 是一种无状态协议,这意味着服务器不需要保存先前请求发送的数据。但是,您可以使用多种方式(显然与 HTTP 无关)来保存该数据并在需要时检索它。

现在,如果我对问题的理解正确,您希望在第二次请求时数据可以返回到 $_POST。好吧,it won't be! $_POST 将只为current 请求保存发送给它的数据(通常来自表单或ajax)。如果它一直保存对服务器的请求的结果,事情很快就会失控。您还可以使用其他机制将数据从易到难保存:

  • $_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 出现的地方:data.php 可能不会使用 $ _邮政!事实上,您正在使用 $_GET。它必须获取您保存在数据库中的数据并将其发回给您。

这个答案超出了您最初的问题,因为您似乎对持久性还没有足够的了解。关于$.post:它是一个jQuery方法,允许您使用POST方法从服务器获取数据,而不是通常的GET方法,但是it doesn't get data that's in the $_POST array, on the other hand you can pass something to $_POST and the server script can act on that data.那将是与数据库交互的脚本需要的一些参数.请参阅documentation 了解更多信息。


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

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

【讨论】:

    猜你喜欢
    • 2017-09-20
    • 2017-02-17
    • 2021-08-15
    • 2015-04-13
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多