我有這個簡單的JavaScript函數,使POST請求和抓取答覆,然後將元素的HTML設置爲答覆。下面是函數:Javascript簡單的功能工作,但不是在循環運行時
function updateStatus(vmid) {
action = 'vmstatuslabel';
label = $('#status-'+vmid);
$.post(site + '/application/controllers/ajax.php', {action:action, vmid:vmid}, function(data) {
console.log(data);
label.html(data);
});
}
該做這樣的事情updateStatus(13)時,卻多次運行它將只會更新表中的最後一個元素工作正常。下面是該腳本標籤呼應表:
<?php
if($uvms = $vmhandler->userVMs()) {
# User has some VMs
?>
<table class="table table-condensed table-striped">
<?php
foreach($uvms as $vm) {
?>
<tr>
<td><a href="<?=$site;?>/manage?vid=<?=$vm['id'];?>"><?=$vm['name'];?></a></td>
<td><?=$vmhandler->renderControls($vm['id']);?></td>
<td id="status-<?=$vm['id'];?>">Test</td>
<td><?=$vm['ipaddr'];?></td>
</tr>
<?php
$vmid = $vm['id'];
echo "<script>updateStatus($vmid)</script>";
}
?>
</table>
下表中的最後一個元素都有其地位科拉姆更新到任何給updateStatus函數返回的元素但其餘保持爲「測試」。
即使這樣的事情不工作:
function updateStatus(vmid) {
action = 'vmstatuslabel';
label = $('#status-'+vmid);
$.post(site + '/application/controllers/ajax.php', {action:action, vmid:vmid}, function(data) {
console.log(data);
label.html("ABCD");
});
}
只有在表中的最後一個元素被設置爲ABCD。
然而,這不工作,和更新每個值ABCD:
function updateStatus(vmid) {
label = $('#status-'+vmid);
label.html("ABCD");
}
我愛你,你能告訴我爲什麼我必須這樣做嗎?所以我不會再犯錯誤了? – user3180103
@ user3180103我會嘗試添加更多解釋 –
我明白了,所以我應該對動作變量進行相同的操作嗎?使它在每種方法的本地?因爲有時「動作請求」可能需要10-15秒才能完成,而用戶可能會在第一個動作還在繼續時運行另一個動作請求。 – user3180103