2

文字列データを返す VB.NET コード ビハインド (クラス) を呼び出す JQuery AJAX があります。特定のサーバーに関する最新の統計情報を取得します。これでコードは機能しますが、初めて更新ボタンを押すとデータが返され、「更新されました」というアラートが画面に表示されます。

しかし、もう一度押すと、「更新されました」というアラート ボックスが 2 回表示され、もう一度 3 回クリックします。タイムアウトが始まるまで、何度も何度も。

それは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 関数を 1 回呼び出します。

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 に答える