2012-03-22 49 views
0

我在jQuery的這個函數,從POST頁獲取數據,然後將反應到一個div:jQuery的延遲後的數據爲DIV

$("#go").click(function(){ 
    $.post("get.php", {p: 'abc'}, function(data){ 
    $('#result').html(data); 
    }); 
}); 

這工作,但反正是有延遲數據進入#result標籤約3秒?

最後,我想在標籤說:

「加載」,「中..」和「載入中...」一秒鐘每個,然後顯示數據。

回答

1

試試這個:

$("#go").click(function(){ 
    // Show loader here 
    $.post("get.php", {p: 'abc'}, function(data){ 
     setTimeout(function() { 
      // Hide loader here 
      $('#result').html(data); 
     }, 3000); 
    }); 
}); 
7

這是您應該使用的語法。

var delayCounter = 3; 
var delayTimer = ''; 
delayTimer = setInterval(function(){ 
    if (delayCounter > 0){ 
    $('#result').html('Loading...'); 
    }else{ 
    $('#result').html(data); 
    clearInterval(delayTimer); 
    } 
    delayCounter--; 
},1000); 

這裏發生了什麼?

  • 我們使用delayCounter變量來計算我們延遲動作的次數。它的起始值是3 - 所以我們將被「延遲」3次。
  • delayTimer變量是計時器本身,將計數每個延遲。
  • 我們使用setInterval函數,這正是我們想要做的 - 設置執行我們的代碼之間的時間間隔。
  • clearInterval是相當自我解釋 - 這結束並清除計時器。
  • 對於每次迭代,我們減少delayCounter變量,以便我們可以跟蹤已經通過了多少間隔。
  • 我們使用毫秒來定義延遲 - 在這裏我使用了1000秒,這是1秒(1000秒)。

還有一個另外你可能想實現的是,而不是簡單地把「加載」文本在你的元素,讓它多一點通過附加文本,使其動態。
什麼可能是有趣的是追加省略號單詞「加載」到得到這樣的效果:

​​

首先設置初始值「加載」然後追加每一個點 -

$('#result').html($('#result').html()+'.'); 
// Loading 
// Loading. 
// Loading.. 
// Loading... 

這就是說你也可以只取GIF動畫,並使用該:P

+2

Geeees - 這是採取** **永遠載入! – Lix 2012-03-22 12:37:03

2

嘗試:


setTimeout(function() { 
    $('#result').html(data); 
}, 3000); 
2

編輯:更新,增加了加載功能。

$("#go").click(function(){ 
    $.post("get.php", {p: 'abc'}, function(data){ 
    window.intervalTimer = setInterval(function(data) { 
     if (!window.timeoutCount) 
      window.timeoutCount = 0; 

      if (++window.timeoutCount > 3) { 
       $('#result').html(data); 
       clearInterval(window.intervalTimer); 
      } 
      else 
        $('#result').html("Loading..") 
    }, 1000); 
    }); 
}); 
2

要延遲在JavaScript中功能的執行使用setTimeout方法。作品有點像:

var doLater = setTimeout(function(){ 
alert('I like to wait 5 seconds'); 
},5000); //delay is stated in ms 

在你的情況,將在最後:

$("#go").click(function(){ 
    $.post("get.php", {p: 'abc'}, function(data){ 
    var wait = setTimeout(function(){$('#result').html(data);},3000); 
    }); 
}); 
+0

-1您的'setInterval'永遠不會被清除。在解釋'setInterval'時,明確需要詳細說明'clearInterval'函數。 – Lix 2012-03-22 12:39:31

+0

@lix:哦,我非常抱歉,並不意味着寫了我真正寫的東西 – m90 2012-03-22 12:49:28

+0

我也有時在他們之間感到困惑!刪除-1,並upvoted :) – Lix 2012-03-22 12:51:10

1
$("#go").click(function(){ 
    $.post("get.php", {p: 'abc'}, function(data) { 
    $('go').html('Loading.'); 
    setTimeout("function() { 
     $('go').html('Loading..'); 
    }",1000); 
    setTimeout("function() { 
     $('go').html('Loading...'); 
    }",1000); 
    $('#result').html(data); 
    } 
} 
+0

+1有點太冗長,我喜歡:P但它應該工作! – Lix 2012-03-22 12:40:21