2

我有一段 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...");
  }
});
});  
}
4

3 回答 3

2

我猜您每次调用该函数时都在绑定单击事件。因此,它对服务器页面进行了如此多的 ajax 调用。所以如果你想保持代码结构不变并修复它,我会取消绑定已经添加的点击事件并再次绑定它。

function RefreshServer(btn,div,id,ip) {

  $("#"+btn).unbind('click');
  $("#"+btn).click(function() {
     //your ajax code is here
  });

}
于 2012-05-07T15:53:53.507 回答
1

该错误似乎不在这个特定的代码区域中......但是看着它,您似乎正在为函数内部设置click处理程序。通常在单击时可能导致多个 AJAX 调用的原因是最简单的:您在同一个事件上附加了多个事件处理程序。$('#' + btn)RefreshServer()

现在,如果您RefreshServer()在同一个btn实例上多次调用该函数,则可能会发生这种情况,因为该函数分配了处理程序。您的代码中是否有可能发生这种情况?我假设以某种方式,在每次单击时,您都会以某种方式调用它,因此将事件处理程序的另一个实例附加到按钮。

于 2012-05-07T15:43:24.580 回答
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;
                }
            );
        }
    });
});
于 2012-05-07T15:50:53.070 回答