Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery在响应之前防止多次提交_Javascript_Ajax_Jquery - Fatal编程技术网

Javascript jQuery在响应之前防止多次提交

Javascript jQuery在响应之前防止多次提交,javascript,ajax,jquery,Javascript,Ajax,Jquery,我会用JS fiddle来做这件事,但我无法让POST Echor正常工作,所以我在这里举个例子。让我们假设someApi返回“bar” JS/jQuery $(function() { $('button').click(function(event) { getSomeData(); }); function getSomeData() { $("div").text("Foo = "); $.get("someApi"

我会用JS fiddle来做这件事,但我无法让POST Echor正常工作,所以我在这里举个例子。让我们假设
someApi
返回“bar”

JS/jQuery

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


点击我

这里可能有一些拼写错误,但请忽略它们,因为我已经在运行中编写了一个示例。如果单击一次
,一切都会正常工作。当响应到来时,将调用AJAX函数并追加
。如果我等待响应并再次单击,
将被
Foo=
覆盖,然后追加。当用户成为住院患者并多次单击
,从而产生多个AJAX请求时,就会出现问题。这会导致多次附加“条”。JS/jQuery中是否有避免向同一URL发送多个请求的功能?我不是说我想要一个
async=false
场景;我知道这会起作用,但也会减慢应用程序的速度。我还知道我可以添加一个if循环来检查是否已经附加了条。我想要的是一个合适的JS/jQuery
.blockMultipleRequest()之类的东西。

我不认为有插件可以实现这一点。您可以这样使用
.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()
,事件处理程序将再次绑定。

我认为没有用于此的插件。您可以这样使用
.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()
,事件处理程序再次绑定。

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

  • 当任何请求启动时(
    事件
    jqXHR
    设置
    属性被发送到处理程序,因此您可以通过评估
    设置来执行特定于URL的操作。URL
  • 当任何请求完成时

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

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

  • 当任何请求启动时(
    事件
    jqXHR
    设置
    属性被发送到处理程序,因此您可以通过评估
    设置来执行特定于URL的操作。URL
  • 当任何请求完成时

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

为什么不从单击按钮的那一刻开始禁用按钮,直到AJAX调用完成?按钮只是一个示例,它可能是另一个触发器。是的,标准做法是在AJAX请求中禁用按钮或最好隐藏按钮,并显示一个tine wait loader gif图像来代替它s用户如何知道ajax上发生了什么?在全文中,浏览器会向用户显示消息。如果是ajax,我们应该显示一些内容。Lol当我单击submit comment时,同样的情况也是如此:-DAs我刚才说过,@guurav,按钮可能不是触发器。我知道在这个意义上可以做什么,正如问题中提到的那样。我想知道的是,在JS/jQ中是否有一种方法可以检测多个AJAX请求。仅此而已!如果没有,我将自己编写一个。为什么不从单击按钮的那一刻起直到AJAX调用完成为止禁用该按钮呢?该按钮只是一个示例,可能是另一个触发器。是的,这是标准做法您应该禁用按钮,或者最好在ajax请求中隐藏它,并显示一个tine wait loader gif图像来代替它。用户如何知道ajax上发生了什么呢?在全文中,浏览器会向用户位显示消息。如果是ajax,我们应该显示一些内容。Lol当我单击“提交评论”时,即使如此:-DAs i've刚才说,@guurav,一个按钮可能不是触发器。我知道在这个意义上可以做什么,正如问题中提到的。我想知道的是,JS/jQ中是否有一种方法可以检测多个AJAX请求。仅此而已!如果没有,我将自己编写一个。