2011-05-09 89 views
5

我正在搞亂jQuery的AJAX功能,並試圖模擬真實的服務器如何延遲我在本地主機上獲得的其他流暢的數據請求。雙jQuery延遲問題()

所以我寫的代碼,它類似於此:

$('form').submit(function (event) { 
    event.preventDefault(); 

$('#response').html('<p>Posting...</p>').fadeIn().delay(2000).queue(function() { 
     $.post (
     'some_url.php', 
     {/*values here*/}, 
     function (response) { 
      $('#response').html(response).delay(1000).fadeOut('slow'); 

      //The line below is to reset the form element 
      $('input[type="text"], textarea').val(' '); 
     }); 
    }); 
}); 

我基本上做的是在這裏我用2秒延遲$。員額方法,使「發帖......」的消息可以看出 當2秒完成後,我希望文本可以隨我得到的響應而改變,保持靜止1秒,我希望它淡出。

第一次延遲完美,Ajax調用完美,問題是 - 由於某種原因,第二次延遲未被讀取,並且響應消息一旦顯示,拒絕消失:)

我的問題是爲什麼會發生這種情況,我該如何解決?

+0

+1有趣的問題... – pixelbobby 2011-05-09 18:56:38

+2

我不知道延遲方法,但它似乎是一個更精確的http請求延遲複製將在服務器端完成,通過包括某種形式的sleep()或無論在你的ajax響應代碼中。 – 2011-05-09 19:00:28

回答

1

您需要出隊才能處理隊列中的下一件事。

http://api.jquery.com/jQuery.dequeue/

編輯:或者在1.4以上next

在jQuery的1.4這是 調用另一個函數傳遞, 作爲第一個參數的功能,即當 稱爲自動離隊下一個 項目並保持隊列移動。您 會使用它,像這樣:

$("#test").queue(function(next) { 
    // Do some stuff... 
    next(); 
}); 

來自:http://api.jquery.com/queue/

+0

謝謝,我用next()解決了它; :) – Maverick 2011-05-09 19:12:22

+0

@Husar,選擇了一個答案,因爲我張貼我的:-P – Neal 2011-05-09 19:13:56

0

你可以試試我的waitForIt插件:

http://jsfiddle.net/maniator/Ad3pv/

你將不得不在第二部分做是:

$('#response').html(response).waitForit({ 
    function: 'fadeOut', 
    options: 'slow', 
    timeOut: 1000 
});