我使用的是Drupal7和Views3,我已经安装了更好的过滤器模块。我公开了一些过滤器,并且我使用ajax,所以当我改变复选框或选择值时,就会出现ajax请求。一般来说,一切都运行得很好。
但是有一个问题我不能处理:/ Basicly,当我改变select值时,ajax请求被发送。在此请求产生结果之前,我再次更改了select值,但没有ajax请求。我不能发送另一个ajax请求或中止现有的请求。
所以我的问题是,如何中止这个ajax请求并立即发送下一个请求?
发布于 2013-06-05 06:33:24
我也有同样的问题,并且设法在不修改任何核心文件的情况下解决了它。这个想法是监听jQuery的全局ajaxSend()事件,存储当前请求的jqXHR对象,然后在过滤器的单击处理程序中,检查请求是否已经完成,如果没有则中止。
var filterXHR = null;
$(document).ajaxSend(function (event, jqXHR, settings) {
filterXHR = jqXHR; // cache XHR object for current ajax request
});
// event handler for when a filter is selected/changed/etc.
$('#filters-block .form-item a').click(function () {
// check if there is a previous request that has not yet completed
if (filterXHR && filterXHR.readyState != 4) {
// abort ajax request
filterXHR.abort();
// subsequent requests will add their own progress indicator,
// so you probably want to remove the old one here
$('.ajax-progress').remove();
}
// submit exposed form, do other stuff, etc..
});我知道复活旧帖子通常是不好的互联网礼仪,但由于这是我在寻找信息时在谷歌上出现的第一个(也是唯一一个)有意义的结果,我想在这里分享我的解决方案是合适的,以帮助其他可能有类似问题并最终登陆这个页面的人。
https://stackoverflow.com/questions/12915259
复制相似问题