JQuery更新状态

时间:2011-08-18 17:46:40

标签: php jquery ajax

我正在编写一些jquery来每2秒调用一次ajax脚本来获取结果并更新页面。我主要是一个后端程序员,可以使用一些帮助。

这是我现在的代码:

<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        
    }
?>

这不起作用。我做错了什么或者你会建议另一种方法吗?

由于

3 个答案:

答案 0 :(得分:1)

我认为你通过给它提供查询字符串变量(作为GET发送)和数据(可能是作为POST发送)来混淆你的PHP脚本。试试这个:

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

答案 1 :(得分:0)

因为你正在使用jquery,所以你可以在页面准备就绪时使用$ .ajax函数。

$(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)功能附加到下载按钮或其他任何内容,以便第一次触发该功能。

答案 2 :(得分: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        
    }
?>

希望这有帮助。