【问题标题】:ajax wont load new sql results until page refreshajax 在页面刷新之前不会加载新的 sql 结果
【发布时间】:2015-04-28 00:03:51
【问题描述】:

我正在建立一个论坛,并使用此代码加载所有 cmets forum_retrieve.php,这在此时可以正常工作。

$(document).ready(function() {
  $('#results_holder').load('forum_retrieve.php<? echo ' ? forum_id = ' . urlencode($forum_id) ?>').show();
});​

但是当用户将表单提交给forum_handle.php(将评论保存到sql)并使用以下方式重定向回来时:

if ($connect->query($sql) === TRUE) {
  header('Location: forums.php?id=' . $_POST['forum_id']);
} else {​

Ajax 不会加载新结果,即使我提交了 5 个 cmets,它们也不会加载,直到我刷新页面或单击另一个页面并返回。

我什至尝试将 ajax 延迟 30 秒,但它仍然不会加载新结果,即使我可以在 sql 中看到它在计时器结束之前。

我尝试过使用no caching headers。我也试过$(window).ready

不应该在每次加载文档时都进行新查询吗?我不明白为什么它选择不这样做。任何建议将不胜感激。

【问题讨论】:

  • 您如何知道 Javascript 正在触发?你有没有设置一些断点?你添加了一些日志吗?您是否看到网络请求在 PHP 端触发和接收?
  • 您何时注入 ajax 结果? document.ready 只触发一次。
  • 当我在它上面设置时间延迟时,它只会在时间到后才会显示旧结果。它会加载所有的 cmets 就可以了,它唯一没有加载的新 cmets。
  • 所以即使在多次离开页面并被重定向回页面后,document.ready 也只会触发一次?
  • 我使用 post 方法发布表单,然后将标题重定向回论坛页面。

标签: javascript php ajax


【解决方案1】:

首先要做的事情:load() 并不是要像您想象的那样使用,根本不是。它只是在您的 $('#results_holder') 加载时触发一个函数。而已。你在那里没有传递任何函数,因此你没有得到任何结果。

然后,正如 Daniel 所指出的,load() 函数只会在文档准备好后被触发一次。然后脚本停止运行,因此它没有机会按您的意愿工作。

您要做的是不时从 forum_retrieve.php 中获取内容并将其显示在适当的容器中。

试试这样的:

$(document).ready(function() {

    var forumID = '<?= urlencode($forum_id) ?>';

    setInterval(function() {
        $.get({
            url: 'forum_retrieve.php',
            data: {forum_id: forumID}
        })
        .done(function(data) { $('#results_holder').html(data); });
    }, 10000);
});

这会每 10000 毫秒(= 10 秒)触发一个函数以从 forum_retrieve.php 检索内容并将其注入 $('#results_holder') 元素。让我知道它是否有效!

【讨论】:

  • 在forum_retrieve.php 中我正在回显带有查询veribales 的html,它加载得很好。但是当用户提交评论时,他们会被带到完成提交查询的 php 中,并且如果查询有效,则“标题(位置:...”会将用户重定向回论坛页面。所以此时应该't the (document)load function trigger??? 我试过你的代码(它没有工作)但我一直在修改它。
  • 我真的不明白你在做什么......在你的问题中,你写道“Ajax 不会加载新结果”,你在调用什么“Ajax “?那么,提交header有什么意义呢?另外,我已经修改了我的代码,你想再试一次吗?
  • 基本上我的问题归结为:在提交表单并将用户发送到一个 php 文件然后发送回论坛页面后,$(document).ready(function () 此时触发
  • 在我的浏览器上,当 my browser 完成加载页面时会触发 $(document).ready()。而已。当用户 A 提交表单并且她被重定向到论坛页面时。其他用户不会仅通过 $(document).ready() 获得任何更新,如果那是您正在寻找的。你希望它做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2015-09-26
  • 1970-01-01
  • 2020-03-01
  • 2020-05-10
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多