2011-07-24 122 views
2

我的問題似乎有一些非常好的資源 - 至少是基礎知識。但是我自己仍然有一些黑暗的地方。Ajax定時刷新/ PHP/MySQL

首先 - 我正在嘗試做什麼。

我讓用戶在中介頁面「等待」,同時檢查他們是否提交了來自其他資源(即SMS或電子郵件)的正確信息以確認他們訂閱了我的服務。頁面應該異步檢查幾秒鐘以查看它們是否完成了所需的步驟,並且它們的狀態在數據庫中被設置爲「1」或「active」。

完成ajax請求看起來非常直截了當 - 然而,時機我有點厚。

此外,我正在試圖處理我正在檢索的信息 - 很好,所以用戶已設置爲「活動」,並且我可以檢索該值 - 但是,接下來我將如何重定向它們到最後的或「謝謝」頁面?它是一個JavaScript變量,應該保存該值然後重定向?

對不起,如果這看起來有點discombobulated,但這是我第一次嘗試在Ajax &定時刷新/響應。

回答

4

我會做的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秒「沒有活動,稍後再試」消息。

+0

+1但是9秒有點短... – ChristopheCVB

+1

它顯然可以根據OP的需要定製;) – AlienWebguy

+0

非常好,我現在正在玩這個。 – Alpinestar22

1

您的「等待」頁面可以用ajax輪詢完成。它可能最初每15-20秒輪詢一次,稍等一會兒後每分鐘備份一次,然後在一段時間後停止輪詢。在所有情況下,請確保您不會永遠保持輪詢,因爲如果用戶從未完成訂閱過程的結束,這將對您的後端造成不利影響。

如果AJAX輪詢得到了成功的答案,我想,那麼你將用戶重定向到兩個地方之一:

1)一個頁面,只是顯示「成功 - 您現在訂閱」,並告訴他們接下來做什麼。

2)實際使用服務的開放網頁。這可能是一個登錄頁面,或者您可能已經自動登錄它們,因此您可以將它們帶到服務的打開頁面。

您可以在客戶端JavaScript(例如,它已經知道在何處重定向用戶的情況下)重定向,或者您可以在該實際的Ajax響應中包含重定向URL,以便可以控制服務器的頁面流-側。你可以這樣做。

0

我正在編寫這個迴應你的問題。我想我會後的情況下,它是有用的:

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); 
}); 
+0

我喜歡這樣的外觀 - 是否有可能在說... 10個請求之後有它?此外 - 我正在從POST獲取我的數據 - 那麼如何將該數據提取到RE-POST到我的PHP腳本?把它放在一個隱藏的形式,並提取它的方式? – Alpinestar22

+0

好吧..所以這裏是我所得到的信息: $ .post(「testurl.php」,{data:「」},callbackfunction())其中$ data是$ _POST ['data']; – Alpinestar22

0

您可以嘗試使用該解決方案的服務器推送(彗星),而不是AJAX。