Javascript jQuery在响应之前防止多次提交
我会用JS fiddle来做这件事,但我无法让POST Echor正常工作,所以我在这里举个例子。让我们假设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"
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请求。仅此而已!如果没有,我将自己编写一个。