Состояние обновления JQuery - PullRequest
       3

Состояние обновления JQuery

1 голос
/ 18 августа 2011

Я пишу jquery для вызова ajax-скрипта каждые 2 секунды, чтобы получить результат и обновить страницу.Я в основном программист бэкэнда и могу помочь с этим.

Это код, который у меня сейчас есть:

<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 ]

1 голос
/ 18 августа 2011

Я думаю, что вы путаете ваш PHP-скрипт, давая ему как строковые переменные запроса (отправленные как GET), так и данные (которые, вероятно, отправляются как POST).Попробуйте это:

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

0 голосов
/ 18 августа 2011

Проблема, с которой вы столкнулись, заключается в том, что вы должны предоставить функцию без параметров, а не вызов функции для 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        
    }
?>

Надеюсь, это поможет.

0 голосов
/ 18 августа 2011

, поскольку вы используете 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) к кнопке загрузки или чему-либо еще, чтобыактивировать функцию в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...