2011-08-18 161 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   
    } 
?> 

希望这有助于。