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 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?