ivy110 2009-11-25 16:42
浏览 543
已采纳

怎样取消ajax的请求?

用ajax实现的IPTV系统中,为了防止因为一个操作超时使得页面长时间没有任何反应(blocked)。在客户端用js做了一个定时,从发送ajax请求开始,如果5s后没有接到response就取消当前请求。而此时只是并没有取消服务器端的操作,如果此时做的是查询也就罢了,但是如果是购买等等操作呢?
一)超时后取消当前操作。可以有两种做法:
1.设定定时,如果超过5s,令canceled=true。添加callback:
[code="javascript"]addCallback(function(){
if(!canceled){
callback方法。。。
}
}
)[/code]
2.调用XMLHttpRequest的abort方法,
问:两者有什么区别吗?XMLHttpRequest的abort方法实现原理是什么?

二)这只是取消客户端的显示。如果是够买等操作,客户端显示“购买超时”,但是服务器5s后却是购买成功。这个有什么办法吗?

三)本系统不含收费系统,收费是通过调用另一系统的web service方法完成的。怎么取消一个web service调用,或者达到同样的效果?

  • 写回答

6条回答 默认 最新

  • xxxxxxxxxxxxxxxxx 2009-11-26 10:02
    关注

    你说的是ajax的Timeout问题。
    网络中断,延迟,服务端处理时间过长都会引起这个问题。

    re: cancel && abort 区别。
    cancel的实现方式,
    [code="javascript"]var canceled = false;
    var cancel =function() { canceled = true; };
    setTimeout(cancel, 5000);[/code]

    abort则直接把整个callback设置为null.

    [color=darkred]如故是服务端处理时间过长,上述两种方法都不会对服务断有任何影响。[/color]

    所以,如果要让Timeout同时在Server端生效,Server端的事务处理,也要有计时(倒计时)功能。 一旦倒计时为0,而事务还没有处理完毕,则要进行相应的处理(比如回滚,或设置status)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器