我有一个HTML页面和链接。所以每个链接调用div内的一个新页面(#start_buttons_container)。
这是我的jquery ajax脚本
$(document).ready(function(){
var loading = "<img src='css/images/loading.gif'/>";
$('.start_buttons').click(function(){
alert('request');
var hrefname = $(this).attr('href').split(' ');
var urlname = "parts/"+hrefname;
$.ajax({
url: urlname,
cache: false,
beforeSend: function() {
$('#start_buttons_container').html(loading);
},
success: function(data){
$("#start_buttons_container").html(data);
$("#start_buttons_container").show(200);
}
});
return false;
});
});
我正在使用此代码并且对我有用。但是当我第二次点击链接时,警报发生了2次,如果我点击第3次,警报就会发生3次。
我的问题: 如果用户点击该链接20次,我该如何停止重复请求?
更新
<div class="form">
<table border="0" align=center cellspacing="15" cellpadding="5">
<tr class="tr1">
<td align="left"><a class="button1 start_buttons" href="new-project.php">New Project</a></td>
<td align="left"><a class="button1 start_buttons" href="user_projects.php">Import</a></td>
</tr>
</table>
<div id="start_buttons_container">
</div>
</div>
<script type="text/javascript" src="js/main.js"></script>
注意:
正如我在多次点击按钮后描述的那样,Ajax开始响应以后,网站几乎没有开始工作。 但我发现了一件事。如果我不使用js外部URL(js / main.js)并将在下面的HTML代码中编写js代码,Ajax工作正常,即使你点击100次也会很快响应。为什么呢?
答案 0 :(得分:1)
如果我理解你正确,你想要防止多个同时的ajax请求。试试这个:
$(function(){
var loading = "<img src='css/images/loading.gif'/>",
pending;
$('.start_buttons').click(function(e){
e.preventDefault(); //instead of return false
if(pending) { //there is an ajax request running
return; //do nothing
}
alert('request');
var hrefname = $(this).attr('href').split(' ');
var urlname = "parts/"+hrefname;
pending = true; //mark as running
$.ajax({
url: urlname,
cache: false,
beforeSend: function() {
$('#start_buttons_container').html(loading);
},
success: function(data){
$("#start_buttons_container").html(data);
$("#start_buttons_container").show(200);
pending = false; //mark as not running
}
});
});
});
如果你想中止已经运行的那个试试这个。
$(function(){
var loading = "<img src='css/images/loading.gif'/>",
pending;
$('.start_buttons').click(function(e){
e.preventDefault(); //instead of return false
if(pending) { //there is an ajax request running
pending.abort();
return; //do nothing
}
alert('request');
var hrefname = $(this).attr('href').split(' ');
var urlname = "parts/"+hrefname;
pending = $.ajax({
url: urlname,
cache: false,
beforeSend: function() {
$('#start_buttons_container').html(loading);
},
success: function(data){
$("#start_buttons_container").html(data);
$("#start_buttons_container").show(200);
pending = undefined; //clear current request
}
});
});
});
答案 1 :(得分:1)
您在您正在加载的AJAX HTML文件中包含main.js。当您从DOM重新加载或清除HTML时,它仍然保留脚本。将脚本移出,使其不是正在加载的HTML的一部分。
答案 2 :(得分:0)
以下是jsfiddle的代码:
$(document).ready(function(){
var count = 0;
var loading = "<img src='css/images/loading.gif'/>";
$('.start_buttons').click(function(){
count++;
if (count > 19) {
return;
}
alert('request'+count);
var hrefname = $(this).attr('href').split(' ');
var urlname = "parts/"+hrefname;
$.ajax({
url: urlname,
cache: false,
beforeSend: function() {
$('#start_buttons_container').html(loading);
},
success: function(data){
$("#start_buttons_container").html(data);
$("#start_buttons_container").show(200);
}
});
return false;
});
});
答案 3 :(得分:0)
单击
时修复重复请求ajax$('.start_buttons').unbind().bind('click', function(event){
event.preventDefault();
//.....
});
答案 4 :(得分:0)
答案很简单,您在加载的文件中放置附加/警报操作。基本文件中的操作从缓存中获取一些东西。所以在加载的文件中,它每次都会反应独特。