javascript:循环中如何等待方法完成了再继续?
for(i++){a(i);}functiona(num){要做很多事情,如ajax获取信息等。}问:1、如何实现等待方法a完成了工作才继续?2、换成函数是否会有改善?注...
for(i++)
{
a(i);
}
function a(num)
{
要做很多事情,如ajax获取信息等。
}
问:
1、如何实现等待方法a完成了工作才继续?
2、换成函数是否会有改善?
注:不想用判断xmlHttp.readyState等方法来实现。
初学者,麻烦请示例。我自己弄好像弄不了
a里面执行了几次的ajax连接啊,这是需要时间的。必须等到a方法中的所有方法都完成了,才进行下一个循环。现在出现的结果是,i一下子直接到最大值了,根本没有等到a去执行。
就是不想用xmlHttp.readyState啊,js不提供其它途径吗?等到a执行完成了,i再加一。
我的for没问题。如果我在a之后加个alert中断,a就有足够的时间去完成工作,整个程序有效。当然不可能加延时的,因为完成的工作时间不可估计。
---------------------------------------------------------------------------------
这样问可能清晰一点吧:
var content;//页面内容
a();//a用ajax取得页面内容,赋给全局变量content
b();//对content进行处理
但是,a都还没执行完,都还没拿到内容给content,b就开始处理了
怎么办?
限制:不把b()放到a()中。
--------------------------------------------------------------------------------- 展开
{
a(i);
}
function a(num)
{
要做很多事情,如ajax获取信息等。
}
问:
1、如何实现等待方法a完成了工作才继续?
2、换成函数是否会有改善?
注:不想用判断xmlHttp.readyState等方法来实现。
初学者,麻烦请示例。我自己弄好像弄不了
a里面执行了几次的ajax连接啊,这是需要时间的。必须等到a方法中的所有方法都完成了,才进行下一个循环。现在出现的结果是,i一下子直接到最大值了,根本没有等到a去执行。
就是不想用xmlHttp.readyState啊,js不提供其它途径吗?等到a执行完成了,i再加一。
我的for没问题。如果我在a之后加个alert中断,a就有足够的时间去完成工作,整个程序有效。当然不可能加延时的,因为完成的工作时间不可估计。
---------------------------------------------------------------------------------
这样问可能清晰一点吧:
var content;//页面内容
a();//a用ajax取得页面内容,赋给全局变量content
b();//对content进行处理
但是,a都还没执行完,都还没拿到内容给content,b就开始处理了
怎么办?
限制:不把b()放到a()中。
--------------------------------------------------------------------------------- 展开
10个回答
展开全部
如果要实现你的这种效果,应该把思路改变一下
function a(num)
{
//这里面有用到Ajax的技术,当然一般会有个回调函数
//假定这个回调函数为callback()
}
function callback()
{
//把for循环的判断移到这里来
//打个比方,当i=0时,已经调用了a(num)
//if (xmlHttp.status == 200) {
//这里处理的当i=0时的事件
//再次调用a(num)
//}
}
也就是说没有for循环了,当你想再次调用这个a函数时,实际上是在回调函数里完成的,即当上次的Ajax请求成功返回并处理后会再次发出Ajax请求
function a(num)
{
//这里面有用到Ajax的技术,当然一般会有个回调函数
//假定这个回调函数为callback()
}
function callback()
{
//把for循环的判断移到这里来
//打个比方,当i=0时,已经调用了a(num)
//if (xmlHttp.status == 200) {
//这里处理的当i=0时的事件
//再次调用a(num)
//}
}
也就是说没有for循环了,当你想再次调用这个a函数时,实际上是在回调函数里完成的,即当上次的Ajax请求成功返回并处理后会再次发出Ajax请求
展开全部
ajax中有个 if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
这个就是已经就绪的标志!4和200都是标志。
xmlhttp的状态:1 装备阶段、2 发送、3 接收、4 所有数据接收完成。
服务器返回的状态:200 正常返回。 404 网页不存在 等。
xmlHttp.onreadystatechange =(function)
这个是触发之后要调用的函数
if (xmlHttp.status == 200) {
这个就是已经就绪的标志!4和200都是标志。
xmlhttp的状态:1 装备阶段、2 发送、3 接收、4 所有数据接收完成。
服务器返回的状态:200 正常返回。 404 网页不存在 等。
xmlHttp.onreadystatechange =(function)
这个是触发之后要调用的函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
xmlHttpRequest.open("POST", url, false); // 同步请求,true为异步
不就会等待你的ajax请求返回了吗?
不就会等待你的ajax请求返回了吗?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般用方法的回调来解决此类问题,
难道你现在的程序a方法没完成他就开始循环了?
程序是按顺序执行的啊,你描述的有问题!
晕,那就是你的for循环写的有问题!
难道你现在的程序a方法没完成他就开始循环了?
程序是按顺序执行的啊,你描述的有问题!
晕,那就是你的for循环写的有问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询