【问题标题】:Ajax Timed Refresh / PHP / MySQLAjax 定时刷新 / PHP / MySQL
【发布时间】:2011-10-11 21:02:35
【问题描述】:

我的问题似乎有一些非常好的资源 - 至少是基础知识。但是我自己还是有一些黑暗的地方。

首先 - 我正在尝试做的事情。

我让用户在中间页面“等待”,同时我检查他们是否从其他资源(即 SMS 或电子邮件)提交了正确的信息,以确认他们订阅我的服务。该页面应每隔几秒钟异步检查一次,以查看他们是否已完成所需的步骤,以及他们的状态是否已在数据库中设置为“1”或“活动”。

完成 ajax 请求似乎很简单——但是时间安排,我有点紧张。

另外,我想用我正在检索的信息做什么 - 太好了,所以用户已设置为“活动”,我可以检索该值 - 但是我用什么将它们重定向到最后一页还是“谢谢”页面?它是应该保存值然后重定向的 javascript 变量吗?

抱歉,如果这看起来有点混乱,但这是我第一次尝试 Ajax 和定时刷新/响应。

【问题讨论】:

    标签: php javascript jquery mysql ajax


    【解决方案1】:

    我会在 ajax 调用中执行预定义数量的间隔 - 尝试 3 次后,失败并显示一条消息:

    var attempts = 0;
    var validation_attempt = setInterval(function(){
        if(attempts > 3)
        {
            clearInterval(validation_attempt);
            $('#my_div').html('No activity, try again later');
            return false;
        }
    
        $.ajax({
            url: '/my_file.php',
            /* other params */
            success:function(data){
                if(data == 'ok')
                {
                    clearInterval(validation_attempt);
                    $('#my_div').html('Your account has been approved');
                }
                else
                {
                    attempts++;
                }
            }
        });
    },3000); // 3 seconds
    

    这实际上应该让用户最多等待 9 秒,然后才能看到“无活动,稍后再试”消息。

    【讨论】:

    • 显然可以根据 OP 的需要进行定制;)
    • 很好,我现在正在玩这个。
    • 我正在尝试对此使用 .ajaxStart 和 .ajaxStop 来显示预加载器图像,但没有任何运气。我的问题是我只是不知道在哪里注入这些方法。 ajaxStart 和 ajaxStop 方法应该放在上述代码块的什么位置?
    【解决方案2】:

    您的“等待”页面可以使用 ajax 轮询完成。它最初可能每 15 到 20 秒轮询一次,稍后会恢复到每分钟一次,然后在一段时间后停止轮询。在所有情况下,请确保您不要永远进行轮询,因为如果用户从未完成订阅过程的结束,这将对您的后端不利。

    如果 ajax 轮询获得成功的答案,我认为您会将用户重定向到以下两个位置之一:

    1) 只显示“成功 - 您现在已订阅”并告诉他们下一步该做什么的页面。

    2) 实际使用服务的打开网页。这可能是一个登录页面,或者您可能已经将它们自动登录,以便将它们带到服务的打开页面。

    您可以在客户端 javascript 中执行此重定向(例如,它已经知道在所有情况下将用户重定向到哪里),或者您可以在实际的 ajax 响应中包含重定向 URL,以便可以控制页面流服务器-边。无论哪种方式都可以。

    【讨论】:

      【解决方案3】:

      我正在编写代码以回答您的问题。我想我会发布它以防万一它有用:

      var active = false, i, t;
      
      // check 'active' for truthyness, if so kill timers
      function checkActive() {
          if(active) {
              clearInterval(i);
              clearTimeout(t);
              window.location.href = "success.html";
          }
          return false;
      }
      
      // recursively call URL to check 'active' status
      function checkStatus() {
          $.post("checkStatus.php", { some: "variable" }, function(resp) {
               if(resp !== "1") {
                   t = setTimeout(checkStatus, 2000);
               } else {
                   active = true;
               }
          });
      }
      
      $(document).ready(function() {
          checkStatus();
          i = setInterval(checkActive, 2000);
      });
      

      【讨论】:

      • 我喜欢它的外观 - 在说... 10 个请求之后是否有可能拥有它?另外 - 我从 POST 中获取我的数据 - 那么我将如何提取该数据以 RE-POST 到我的 php 脚本?把它放在一个隐藏的形式中然后这样提取它?
      • 好吧..这就是我获取信息的方法:$.post("testurl.php", {data: "=$data;?>"}, callbackfunction())其中 $data 是 $_POST['data'];
      【解决方案4】:

      对于此解决方案,您可以尝试使用服务器推送(彗星)而不是 ajax。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2012-03-04
        • 2013-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多