1

我会在 JS fiddle 中执行此操作,但我无法让 POST 回显器工作,所以我将在这里做一个示例。让我们假设someApi返回“bar”

JS/jQuery

$(function() {
    $('button').click(function(event) {
        getSomeData();
    });
    function getSomeData() {
        $("div").text("Foo = ");
        $.get("someApi", function(i) {
            $("div").append(i);
        });
    };
});

HTML

<div></div>
<button>Click Me</button>

这里可能有一些错别字,但请忽略它们,因为我已经写了一个即时示例。发生的情况<button>是单击一次,一切正常。调用 AJAX 函数并<div>在响应到来时附加 。如果我等待响应并再次单击,<div>则会被覆盖Foo =然后附加。当用户变得不耐烦并<button>多次单击并产生多个 AJAX 请求时,就会出现问题。这最终会导致多次附加“bar”。JS / jQuery 中是否有避免向同一个 URL 发送多个请求的功能?我不是说我想要一个async = false设想; 我知道这会起作用,但也会减慢应用程序的速度。我也知道我可以添加一个 if 循环来检查 bar 是否已被附加。我要的是一种适当的 JS / jQuery.blockMultipleRequest();类型的东西。

4

2 回答 2

1

我不认为有一个插件。你可以这样使用.one()

function bindButton() {
    $('button').one('click', function(event) {
        getSomeData();
    });
}

function getSomeData()
    $("div").text("Foo = ");
    $.get("someApi", function(i) {
        $("div").append(i);
        bindButton();
    });
}

$(function() {
    bindButton();
});

在函数bindButton()中,您使用 定义您的事件处理程序one()。一旦按钮被单击,事件就会被删除,直到 AJAX 调用响应,然后再次调用函数bindButton()并再次绑定事件处理程序。

于 2013-02-27T14:56:58.220 回答
0

您可以使用 jQuery 提供的全局 AJAX 事件处理程序,然后根据请求执行操作。

  • .ajaxSend()当任何请求开始时(eventjqXHRsettings属性被发送到处理程序,因此您可以通过评估来执行特定于 URL 的操作settings.url
  • .ajaxComplete()当任何请求完成时。

然后,您可以使用跟踪每个 URL 的 AJAX 调用的对象,该对象可以在发送另一个请求之前进行咨询(例如,仅当它当前不处于活动/挂起状态时)。

于 2013-02-28T09:11:21.060 回答