我有这个代码,我遇到的问题是我想停止循环然后替换文本'完成!'来自带有“textnew”字符串的sms-loader.php脚本。问题是循环再次发生,因此div.checkstatus字段中的文本再次被调用的php脚本替换。
奇怪的是,我看到了日志消息,并且我又得到了一个新的(最终的)请求,尽管在我的脚本中排序是相反的(第一站然后替换text())。我需要了解为什么会这样。
$(document).ready(function() {
var interval = "";
$('.checkstatus').each(function(){
var msgid = $(this).data('msg')
$this = $(this),
hid = $this.data('history'),
textnew = '<a href="sms-dstatus.php?id='+msgid+'&sid=' +hid+ '&keepThis=true&TB_iframe=true&height=430&width=770" title="Delivery Status" class="thickbox"><img src="../template/icons/supermini/chart_curve.png" alt="status" width="16" height="16" /></a>';
interval = setInterval(function() {
$this.load('../pages/sms-loader.php?id='+msgid);
// stop the loop
if($this.text()=='Done!'){
// stop it
clearInterval(interval);
console.log(textnew);
$this.html(textnew); /// this line is the problem
}
}, 5000); // 5 secs
});
});
答案 0 :(得分:0)
你必须在“间隔”之前放一个“var”,把它标记为本地..
答案 1 :(得分:0)
我按照“提示”来更好地查看$ .ajax函数,我确实有更好的控制权。
$(document).ready(function() {
var interval = "";
$('.checkstatus').each(function(){
var msgid = $(this).data('msg')
$this = $(this),
that = $this,
hid = $this.data('history'),
refreshimg = '<img src="../template/icons/smalls/10.png"/>';
var interval = setInterval(function() {
//$this.load('../pages/sms-loader.php?id='+msgid);
$.ajax({
url: "../pages/sms-loader.php",
type: "GET",
data:{id:+msgid},
success: function(data) {
if($this.text()=='Done!'){
clearInterval(interval);
}else{
$this.html(data);
}
}
}).done(function(){
if($this.text()=='Done!'){
console.log(refreshimg);
$this.empty().html(refreshimg).show();
clearInterval(interval);
}
});
}, 5000); // 5 secs
});
});
答案 2 :(得分:0)
AJAX是非同步的,因此在请求发出时,您的其他代码将会被触发......在返回的数据之前。我不是100%理解目标,但是关于如何使用AJAX成功回调的概述应该有帮助
$this.load('../pages/sms-loader.php?id='+msgid, function(){
/* AJAX complete and new html exists, run code here for after load-*/
/* I believe you want to run clearInterval here */
});
请参阅load()
的参考文档:http://api.jquery.com/load/