我正在编写一些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
}
?>
这不起作用。我做错了什么或者你会建议另一种方法吗?
由于
答案 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
}
?>
希望这有帮助。