我需要每隔x秒进行一次Ajax调用,从xml读取数据并使用xml数据作为变量在x秒后调用相同的函数
这是代码:
<script type="text/javascript">
function fetchAjaxContent(msg,time) {
setTimeout(function(){
$.ajax({
type: "GET",
url: "ajax.php?msg="+msg+"&p="+Math.random(),
dataType: "xml",
success: function(xml) {
$(xml).find('msgs').each(function(){
var content = $(this).find('content').text();
var ftime = $(this).find('time').text();
$("#page-wrap").html(content);
});
}
});
msg=msg+1;
if(msg=4)
msg=1;
ftime=parseInt(ftime)*1000;
fetchAjaxContent(msg,ftime);
},time);
}
fetchAjaxContent(1,0);
它在第一次迭代时工作,第二次失败。
函数以msg id = 1和time = 0开始,以启动pageload上的第一个循环。在第二个循环中,settimeout在x秒后调用。
我做错了什么,请帮忙
答案 0 :(得分:0)
采取这些代码
msg=msg+1;
if(msg=4)
msg=1;
ftime=parseInt(ftime)*1000;
alert(ftime);
fetchAjaxContent(msg,ftime);
我在这里发现了一个问题:
if(msg=4) should be if(msg == 4)
另一个问题:
error
是一个函数,所以它应该
error: function() {
alert('Error');
}
总体上尝试以下:
function fetchAjaxContent(msg, time) {
setTimeout(function() {
$.ajax({
type: "GET",
url: "ajax.php",
dataType: "xml",
success: function(xml) {
$(xml).find('msgs').each(function() {
var content = $(this).find('content').text();
var ftime = $(this).find('time').text();
$("#page-wrap").html(content);
});
msg = msg + 1;
if (msg == 4) msg = 1;
ftime = parseInt(ftime) * 1000;
alert(ftime);
fetchAjaxContent(msg, ftime);
},
error: function() {
alert("error");
}
});
}, time);
}
fetchAjaxContent(1,0);
答案 1 :(得分:0)
你在succes函数中定义ftime
,这意味着它在succes函数之外不可用,
在main函数中定义ftime
,以解决您的问题。
function fetchAjaxContent(msg,time) {
var ftime;
setTimeout(function(){
$.ajax({
type: "GET",
url: "ajax.php?msg="+msg+"&p="+Math.random(),
dataType: "xml",
success: function(xml) {
$(xml).find('msgs').each(function(){
var content = $(this).find('content').text();
ftime = $(this).find('time').text();
$("#page-wrap").html(content);
});
}
});
msg=msg+1;
if(msg=4)
msg=1;
ftime=parseInt(ftime)*1000;
fetchAjaxContent(msg,ftime);
},time);
}
<强>更新强>
您的代码中还有一个问题,
jQuery.ajax()
执行异步 HTTP(Ajax)请求。因此,ftime
不会立即设置fetchAjaxContent
将使用相同的ftime
连续调用,您应该将所有代码都放入ajax成功函数中。
function fetchAjaxContent(msg,time) {
setTimeout(function(){
$.ajax({
type: "GET",
url: "ajax.php?msg="+msg+"&p="+Math.random(),
dataType: "xml",
success: function(xml) {
$(xml).find('msgs').each(function(){
var content = $(this).find('content').text();
var ftime = $(this).find('time').text();
$("#page-wrap").html(content);
msg=msg+1;
if(msg=4)
msg=1;
ftime=parseInt(ftime)*1000;
fetchAjaxContent(msg,ftime);
});
}
});
},time);
}