我要实现的功能如下:
在一段JS代码中有个for循环,然后for中是调用封装好的AJAX方法。然后我要在for循环中每执行一次AJAX,就将返回的数据显示到页面上。这样保证下面页面显示的内容是动态刷新的。
js代码如下:
for(var i=0;i<number;i++){
var data=sendData(xxxx);
//显示数据到指定ul下的li
var li=document.createElement("li");
li.innerHTML =data;
ul.appendChild(li); }
AJAX代码如下:
$.ajax({url:"send.do?method=sendData",
data:{"data":value,"ipAddress":ipAddress,"port":port},
type:"POST",
dataType:'dataType',
cache:true,
async:false,
success:function(data){
ret=data;
}});
我的后台部分就是个socket客户端,执行到后台就是往服务端发送数据,然后返回。现在遇到的问题是js中for循环结束后,并不是一条一条显示而是一起全部显示出来了。如果在for中间写个alert 那么他就是一条条显示了。一开始我以为是时间太快的问题,所以在for中加了setTimeout("",3000);结果是也不好使。请高手帮解决下!
ajax是异步的,你要的效果可以用setTimeOut实现,DEMO:
function GetFeed() {
$.ajax({
url: '../WebService/Feed.asmx/GetFeed',
data: "{\"count\":10}",
type: 'post',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
//显示在页面
ShowFeed();
},
error: function (xhr) {
}
});
}
function ShowFeed() {
forrun = setInterval("GetFeed()", 5000);
}
效果是每隔5秒种更新页面数据
谢谢啦,问题解决了!
@憤怒的小鳥: 如果解决了请结帖哈
dataType:'dataType', 数据类型是什么?
如果你写 text
success中 alert(data);能有提示框,否则可能没有执行成功。
上面的例子是我随便打的,我程序里的AJAX可以返回数据,没有问题。谢谢!主要是解决循环问题。
@憤怒的小鳥: for循环进程就卡住了,所以要等for结束,才能显示效果。
你说你在for中加了setTimeout。setTimeout加for里干什么呀,
那个setTimeout,没一段时间执行一次,和for的功能不混淆了。
放心,你用setTimeout肯定好使的。
问题大家都指出来啦。不知道我这样的代码行不行?
1 var number = ...;
2 var i = 0;
3 (function trySendData() {
4 $.ajax({
5 url: "send.do?method=sendData",
6 type: "POST",
7 dataType:...,
8 cache:...,
9 async:true, //
10 success: function(data) {
11 var li=document.createElement("li");
12 li.innerHTML =data;
13 ul.appendChild(li);
14 ret = data;
15 if (++i < number)
16 trySendData(); //setTimeout(trySendData, 500);
17 },
18 error: ....
19 });
20 })();
我觉得楼主的问题主要是在
ul.appendChild(li);
这里是不是应该加一个setTimeout(fun,0)
js代码的问题。
问题在于,你是在循环中AJAX请求的。 ajax是异步的。
解决:应该在ajax完成后,再执行下一个AJAX。
我的在for里执行为什么不行啊