用jquery发送ajax请求的确是太方便了,$.get、$.post、$.ajax等等,但我们有时候需要中途中止ajax请求。

举个例子,用comet做聊天时,发送一个请求后,服务端通常过几十秒后才会刷新链接、返回数据。假设服务端是30秒刷新一次链接,如果我们在10秒时想要停止这个ajax请求,怎么办呢?

先上代码,后面再解释


var ajaxGet = $.get("comet_server.php",{id:1},function(data){
....//一些操作
});
ajaxGet.abort();

上面这段代码其于两个知识点:

1. $.get返回的数据类型是XMLHttpRequest,请参考手册。($.post、$.ajax、$.getJSON、$.getScript也同样)

2. XMLHttpRequest对象有abort()方法

注意:abort()后,ajax请求立即停止,但还是会执行后面的function()。如果想避免执行其中的操作,可以在function()开始位置加判断


var ajaxGet = $.get("comet_server.php",{id:1},function(data){
if(data.length == 0) return true;
....//一些操作
});
ajaxGet.abort();

  使用AJAX取后台数据,按要求每次应该返回的是不同的结果,但由于缓存,经常会出现两次取的数据重复的问题。特从网上寻觅解决方法:

  1、在服务端加 header(“Cache-Control: no-cache, must-revalidate”);

  2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,”0″);

  3、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“Cache-Control”,”no-cache”);

  4、在 Ajax 的 URL 参数后加上 “?fresh=” + Math.random(); //当然这里参数 fresh 可以任意取了

  5、和第4种类似,只不过把参数换成时间。因为毕竟随机数还是存在重复的可能性,如果换成时间就不可能重复了。在 URL 参数后加上 “?timestamp=” + new Date().getTime();

  6、用POST替代GET:不推荐