高手请进!关于ajax顺序执行的问题。

hemeng 2008-05-16 09:11:50
情况是这样的,我用ajax调用的后台的一个函数,这个函数是用来抓取其他网站的内容的。把返回的值再用javascript复止给前台的DIV,但是问题是我现在是循环了这一个过程,也就是说我要抓取不同网页的内容,这样ajax必须的顺序执行的(就是抓完了第一个,填出第一个,在抓第二个,填充第二个。。。),在这个过程中我要是执行服务器短控件的事件(比如说我执行一个Button的事件),这样就必须等到全部DIV的内容加载完成才能够执行。我想怎么能够终止这个循环的过程?或者不等到加载完,就执行那个Button的事件?请高手解答!!!
...全文
355 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
myvicy 2008-05-20
  • 打赏
  • 举报
回复
我的意思是
var i = 0;
var divid = []
var sitename = []
//为了简化期间,我只用site和div参数,且他们的长度必须相等
function get_serverValue(url){
//使用同步的办法来获取内容,并且最终返回内容
}
function Fill_Client(){
document.getElementById(divid[i]).innerHTML = get_serverValue(sitename[i])
if(i<divid.length)
t = window.setTimeout("Fill_Client()",100);
else
window.clearTimeout(t);
}
上面是同步的方法.

异步的话将异步获取的函数settimeout,在内容获取完毕后settimeout调用函数来获取下一个url的内容。

其实这些都可以放到xmlhttp的onreadystatechange 属性中处理,在其中调用方法来获取下一个url的内容并填充直到没有url了。
hemeng 2008-05-20
  • 打赏
  • 举报
回复
function Fill_Client(divid,typeid,count,typename,sitename,divclass,divcount)
{
//alert(divid);
PageMethods.Fill_Server(divid,typeid,count,typename,sitename,divclass,divcount,document.getElementById("HidUserName").value.trim(),Fill_Client_Complete);
}

function Fill_Client_Complete(myarray)
{
document.getElementById("c_"+myarray[0]).innerHTML = myarray[1];
if(document.getElementById("HidDivCount").value == myarray[2])
{
document.getElementById("HidIsEnd").value = "1";
}
}
hemeng 2008-05-20
  • 打赏
  • 举报
回复
哦,时间开始用的是500。
hemeng 2008-05-20
  • 打赏
  • 举报
回复
<script type="text/javascript" language="JavaScript">

var __sto = setTimeout;
window.setTimeout = function(callback,timeout,param){
var args = Array.prototype.slice.call(arguments,2);
var _cb = function(){
callback.apply(null,args);
}
__sto(_cb,timeout);
}
</script>

for(l=0;l<canshu1.length;l++)
{
window.setTimeout(Fill_Client,5000,canshu1[l],canshu2[l],canshu3[l],canshu4[l],canshu5[l],canshu6[l],canshu7[l]);
}
myvicy 2008-05-20
  • 打赏
  • 举报
回复
你用的是多久调用一次的?
把你的代码贴来看看?
hemeng 2008-05-20
  • 打赏
  • 举报
回复
把循环改为用settimeout来实现.参数事前放到一个数组里面,这样还是不行啊。。。。。。
救命啊!老大!感激不尽!!
hemeng 2008-05-20
  • 打赏
  • 举报
回复
myvicy 的思路果然好!
但是我的参数怎么办?我也放到settimeout里,给隐含的htm标签复制?
myvicy 2008-05-20
  • 打赏
  • 举报
回复
把循环改为用settimeout来实现.也就是定时去调用一个ajax而参数为动态的。
hemeng 2008-05-20
  • 打赏
  • 举报
回复
我程序的那个循环是这样的:循环了一个javascritp函数(ajax的前台函数),这个前台的函数调用后台函数(就是[WebMethod]里面的C#函数)取得各个网页内容,然后返回到前台填充到各个DIV内。在这个过程中我要打开新窗口(window.open)或其他的操作,都必须等这个循环!郁闷。
请告诉我详细一些的思路吧,在下感激不尽!!
momochong0 2008-05-20
  • 打赏
  • 举报
回复
用window.open打开的这个窗口来调用父窗口的事件再用settimeout来实现.也就是定时去调用一个ajax而参数为动态的。
z7hong 2008-05-19
  • 打赏
  • 举报
回复
ajax用的XML必须要用实体的文件吗?
hemeng 2008-05-19
  • 打赏
  • 举报
回复
顶!希望高手来解答!!
hemeng 2008-05-19
  • 打赏
  • 举报
回复
顶!希望高手来解答!!
hemeng 2008-05-19
  • 打赏
  • 举报
回复
Leon Chen
这样也不行啊。
hemeng 2008-05-19
  • 打赏
  • 举报
回复
不明白LS说的啊。我的问题怎么解决?
cylot 2008-05-17
  • 打赏
  • 举报
回复
window.document.location.href="./admin_index.aspx"
syc958 2008-05-16
  • 打赏
  • 举报
回复
楼主说的有点看不懂!!!
  • 打赏
  • 举报
回复
你的ajax是同步的吧,这样会阻塞js代码的顺序执行直到ajax返回
hemeng 2008-05-16
  • 打赏
  • 举报
回复
补充说明一下:如果这个按钮是HTML控件的话,执行javascript倒是可以及时相应(因为执行都是在客户端嘛),但是当我用window.open加载一个aspx页面的时候,情况和上面说的一样,必须等到夫窗口的所有div加载完成以后,这个打开的页面在开始加载。
请高手解答,再线等!!
hemeng 2008-05-16
  • 打赏
  • 举报
回复
更正一下,window.open的是一个“html”页面,页面也很慢,也是必须等待循环的完成。

window.open还是在原来的进程里面的,必须等待。我怎么才能启动一个新的进程?就像双击IE图标那样?
加载更多回复(4)

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧