2011-04-16 60 views
29

我有一個MySQL數據庫反饋構造是這樣的:的jQuery - AJAX調用每10秒

名稱|位置|反饋

Ryan |英格蘭|很好的支持

很明顯,有比這更多的條目。我正在嘗試構建一個反饋div,通過ajax每隔10秒顯示一個新的反饋項目。

所以我已經建造這樣的:

$(document).ready(function(){ 
    new get_fb(); 
}); 

function get_fb(){ 
var feedback = $.ajax({//Ajax 
         type: "POST", 
         url: "feedback.php", 
         async: false 
         }).responseText;//end of ajax 

$('div.feedback-box').html(feedback).delay(10000).queue(function() { 
    new get_fb(); 
    }); 
} 

這是我的PHP文件:

$result = mysql_query("SELECT * FROM feedback ORDER BY RAND() LIMIT 0,1"); 
while($row = mysql_fetch_array($result)) 
{ 
    $name = $row['name']; 
    $location = $row['location']; 
    $feedback = $row['feedback']; 

    echo " 
    <p>Name: $name, Location: $location, Feedback: $feedback.</p> 
    "; 
} 

然而,這僅僅顯示了兩個。它不會繼續顯示新的,它純粹顯示第一個然後停止。

我在做什麼錯?謝謝:)

回答

48

你要想做一個setInterval()

setInterval(function(){get_fb();}, 10000); 

或者:

setInterval(get_fb, 10000); 

或者,如果你希望它運行後,才成功地完成呼叫,您可以在.ajax().success()回調對其進行設置:

function get_fb(){ 
    var feedback = $.ajax({ 
     type: "POST", 
     url: "feedback.php", 
     async: false 
    }).success(function(){ 
     setTimeout(function(){get_fb();}, 10000); 
    }).responseText; 

    $('div.feedback-box').html(feedback); 
} 

或者使用.ajax().complete()如果您希望它運行而不管結果如何:

function get_fb(){ 
    var feedback = $.ajax({ 
     type: "POST", 
     url: "feedback.php", 
     async: false 
    }).complete(function(){ 
     setTimeout(function(){get_fb();}, 10000); 
    }).responseText; 

    $('div.feedback-box').html(feedback); 
} 

以下是兩者的演示。請注意,成功只有一次,因爲jsfiddle在ajax調用上返回404錯誤。

http://jsfiddle.net/YXMPn/

+1

我發現我已消除的代碼,這將破碎的功能的'.responseText'部。看我最後的編輯。 – 2011-04-16 15:55:19

+1

太棒了!非常感謝你的幫助!我用你的例子(.ajax()。complete())謝謝:) – ryryan 2011-04-16 20:58:28

+1

沒問題。很高興幫助。 :) – 2011-04-16 21:03:11

3

你可以嘗試的setInterval()代替:

var i = setInterval(function(){ 
    //Call ajax here 
},10000) 
10
setInterval(function() 
{ 
    $.ajax({ 
     type:"post", 
     url:"myurl.html", 
     datatype:"html", 
     success:function(data) 
     { 
      //do something with response data 
     } 
    }); 
}, 10000);//time in milliseconds 
+0

@穆罕默德 - 你有一個misaligned url屬性的雙引號。 – 2011-04-16 15:56:02

+0

@Maerlyn - 我忘了我們可以編輯答案。 – 2011-04-16 16:33:26

+0

@Jared感謝提及和@Maerlyn感謝您糾正 – 2011-04-16 16:34:38