怎样取消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调用,或者达到同样的效果?

你说的是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)

abort()
取消当前响应,关闭连接并且结束任何未决的网络活动。

这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。

如果后台已经在调用服务的时候,那是没办法取消的,
所以后台这块你也得加处理一个定时问题

你可以把response也包含到操作数据库的事务中,当返回异常时抛出异常,然后回滚不就行了么?

abort()

用jquery这个问题会很容易解决。