ajax - 停止重复的 Ajax 提交?

标签 ajax jquery

我想知道使用 jquery 和 ajax 时停止重复提交的最佳方法是什么?

我想出了两种可能的方法,但不确定这是否是唯一的两种。

  1. 在 Ajax 开始时禁用所有按钮,直到请求完成。我看到的两个问题是我使用 jquery 模型对话框,所以我不知道禁用这些按钮有多容易,因为我不确定它们是否有 id。其次,如果请求挂起,用户实际上无法重试,因为所有按钮都被禁用。

  2. 我现在正在研究一个名为 AjaxQueue 的东西,我不知道它是否是我所需要的,也不知道它是如何工作的,因为该插件的网站显然已关闭以进行维护。

http://docs.jquery.com/AjaxQueue

编辑

我认为这是我所看到的内容的衍生。

http://www.protofunc.com/scripts/jquery/ajaxManager/

我看到这个 ajaxManager 的唯一问题是我认为我必须将所有 $.post、$.get 和 $.ajax 更改为它们的类型。

但是如果我需要 $.ajax 中的特殊参数,会发生什么情况?或者说我喜欢使用 .post 和 .get。

编辑2

我认为它可以接受所有 $.ajax 选项。我还在调查中。然而,我现在不确定的是,我是否可以对使用相同选项的所有请求使用相同的构造函数。

First you have to construct/configure a new Ajaxmanager
//create an ajaxmanager named someAjaxProfileName
var someManagedAjax = $.manageAjax.create('someAjaxProfileName', {
    queue: true, 
    cacheResponse: true
});

或者我每次都必须进行上述操作吗?

最佳答案

当用户单击按钮时设置一个标志怎么样?仅当 AJAX 请求成功完成时(在 complete 中,在 successerror 回调之后调用),您才会清除该标志,并且您如果未设置该标志,则仅发送 AJAX 请求。

与 AJAX 队列相关的是一个名为 jQuery Message Queuing 的插件。这是非常好的。我自己用过。

var requestSent = false;

jQuery("#buttonID").click(function() {   
   if(!requestSent) {
      requestSent = true;

      jQuery.ajax({
         url: "http://example.com",
         ....,
         timeout: timeoutValue,
         complete: function() {
             ...
             requestSent = false;
         },
      });
   }
});

如果您认为您的请求有可能挂起,您可以为长时间运行的请求设置超时值(值以毫秒为单位)。如果发生超时,则会调用 error 回调,然后调用 complete 回调。

关于ajax - 停止重复的 Ajax 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959640/

相关文章:

javascript - PHP 函数的返回如何看起来对 AJAX 和 PHP 使用有效?

javascript - 在处理旧请求时阻止新的 ajax 请求

php - yii2 listview分页,url错误

javascript - 500(内部服务器错误)jQuery ajax ui 自动完成 codeigniter

jQuery - .getjson VS .ajax json

javascript - 内部ajax从for循环jquery获取递增变量

javascript - 取消初始化数据表(从内存中清除)?

javascript - Nodejs、 express 、Ajax : Function triggers only Six Times

javascript - 仅选择javascript中的当前点击(div)元素

javascript - 我可以使用任何版本的 jquery 使用 jQuery.noConflict