我有一块JQuery AJAX,它调用返回字符串数据的VB.NET代码隐藏(类)。它抓取特定服务器上的一些最新统计信息。现在代码有效,但是第一次按下刷新按钮时,数据会被返回,屏幕上会显示“刷新”警告。
但如果我再次按下它,警告框“刷新”会显示两次,我再次点击三次!等等,直到超时开始。
它似乎来自AJAX调用而没有其他地方。我不知道什么可以称之为,我已经尝试删除成功后返回的数据,但没有快乐。关于什么可能导致这个或在哪里看的任何想法?
function RefreshServer(btn,div,id,ip) {
$('#aRefresh'+id).html("<img src=images/refreshServer.gif border=0 align=absmiddle />");
$("#"+btn).click(function() {
$.ajax({
type: "POST",
url: "Dashboard.aspx/refreshServerAJAX",
timeout: 5000,
data: "{'IP': '" + ip + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
var substr = msg.d.split('%');
$('#serverBox_mod'+id).html(" " +substr[0]);
$('#serverBox_map'+id).html(" " +substr[1]);
$('#serverBox_playing'+id).html(" " +substr[2] + "/" + substr[3]);
$('#serverBox_img'+id).html("<img src=images/Maps/" + substr[4] + " height=80 width=120 border=0 style=margin-top:10px;margin-bottom:10px; />");
$('#serverBox_title'+id).html(" " +substr[5]);
$('#aRefresh'+id).html("Refresh");
delete substr
delete msg
alert("Refreshed");
},
error: function(msg) {
$('#aRefresh'+id).html("Refresh");
$('#serverBox_title'+id).html("Server didn't respond!, sorry about that. Please try again...");
}
});
});
}
答案 0 :(得分:2)
我猜你每次调用函数时都会绑定click事件。所以它正在向服务器页面调用大量的ajax。因此,如果您希望保持代码结构并修复它,我将取消绑定已添加的click事件并再次绑定它。
function RefreshServer(btn,div,id,ip) {
$("#"+btn).unbind('click');
$("#"+btn).click(function() {
//your ajax code is here
});
}
答案 1 :(得分:1)
错误似乎不在这个特定的代码区域......但是看着它,似乎你在{{1}内设置click
的{{1}}处理程序功能。正常情况下可能导致多次AJAX调用的原因是最简单的:您在同一事件上附加了多个事件处理程序。
现在,如果您多次在同一个$('#' + btn)
实例上调用RefreshServer()
函数,则会发生这种情况,因为该函数会分配处理程序。您的代码中是否有可能发生这种情况?我假设不知何故,每次点击,你都会以某种方式调用它,因此将一个事件处理程序的另一个实例附加到按钮。
答案 2 :(得分:0)
使用它来调用ajax函数一次:
var ajaxLoading = false;
$(document).ready(function() {
$('#ajaxRequestor').click(function(e) {
e.preventDefault();
if(!ajaxLoading) {
ajaxLoading = true;
$('#ajaxContentPlaceholder').load('/path/to/content.html',
function() {
ajaxLoading = false;
}
);
}
});
});