2011-08-18 160 views
1

我在寫一些jQuery,每2秒調用一次ajax腳本來獲取結果並更新頁面。我主要是後端程序員,可以在這方面使用一些幫助。JQuery更新狀態

這是我現在的代碼:

<script language="javascript"> 
function downloadProgress(id) { 
    $("#" + id + "").load("index.php?_controller=download&_action=getDownloadProgressAjax", 
      { 
       downloadId: id 
      } 
     ); 
    setTimeout(downloadProgress(id), 2000); 
} 
</script> 
<?php 
    foreach ($downloads as $dl) { 
?> 
<div id="<?php echo $dl["download_id"]; ?>"> 
    <script language="javascript"> 
     downloadProgress(<?php echo $dl["download_id"]; ?>); 
    </script> 
</div> 
<?php   
    } 
?> 

這是行不通的。我做錯了什麼,或者你會提出另一種方法?

感謝

回答

0

因爲你使用jQuery,您可以使用$就功能時,該頁面已準備就緒。

$(function() { 
    function function downloadProgress(id) { 
    $.ajax({ 
     url: "index.php?_controller=download&_action=getDownloadProgressAjax&downloadId="+id 
     }) 

    setTimeout(function() { 
     if (downloadnotcomplete){ // this way your script stops at some pont. 
      downloadProgress(id); 
     } 
    },2000); 
    } 
}); 

您將downloadProgress(id)函數附加到您的下載按鈕或其他任何地方,以便第一次觸發該函數。

1

我認爲通過爲PHP腳本提供查詢字符串變量(以GET方式發送)和數據(可能以POST方式發送)這兩個問題,您會感到困惑。試試這個:

$("#" + id).load("index.php?_controller=download&_action=getDownloadProgressAjax&downloadId="+id }

+0

'{downloadId:id}'是一個以POST數據發送到服務器的對象。你認爲他需要使用get或post,但不能同時使用。 http://api.jquery.com/load/#example-3 – brenjt

+0

謝謝,我已經更新了我的文章 - 我無法找到jQuery API中提到的[data],因爲我正在閱讀有關該事件。 load()而不是ajax .load()。 :-P – Blazemonger

0

您遇到的問題是,你必須提供一個無參數的功能,而不是一個函數調用的setTimeout。此外,我會做一點點不同,並使用setInterval而不是setTimeout,因爲它更好地在代碼中傳達你的意圖。這裏是我會怎麼做:

<script language="javascript"> 
    $(function() { 
     setInterval(downloadHandler, 2000); 
    }); 
    function downloadHandler() { 
     // I'm not sure where the id is coming from you will probably need to put a 
     // class on your div's so that you can select them. 
     $(".MyDivClass").each(function() { 
      var id = $(this).attr("id"); 
      downloadProgress(id); 
     }); 
    } 
    function downloadProgress(id) { 
     $("#" + id + "").load(
      "index.php?_controller=download&_action=getDownloadProgressAjax", 
      { downloadId: id } 
     ); 
</script> 

,然後在你的DIV:

<?php 
    foreach ($downloads as $dl) { 
?> 
    <div id="<?php echo $dl["download_id"]; ?>" class="MyDivClass"/> 
<?php   
    } 
?> 

希望這有助於。