2012-05-07 10 views
2

文字列データを返すVB.NETコードビハインド(クラス)を呼び出すJQuery AJAXがあります。それは特定のサーバー上のいくつかの最新の統計情報を取得します。コードは機能しますが、初めてリフレッシュボタンを押すとデータが返され、画面にアラート「リフレッシュ」が表示されます。AJAX Callは呼び出されるたびに+1インクリメントしています

しかし、もう一度押すと、「更新済み」という警告ボックスが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..."); 
    } 
}); 
}); 
} 
+1

これは実際のコードですか?セミコロンがたくさんあります。 –

+0

あなたは何を求めていますか?それを複数回表示したくないですか? –

+0

@Jonathan M、はい、それは残念ですが、私は編集しました。 – JGreasley

答えて

2

私はあなたが関数を呼び出す毎回クリックイベントをバインドしていると思います。そのため、サーバー・ページへの多数のajax呼び出しが行われています。ですから、コード構造をそのまま維持して修正したい場合は、すでに追加されたクリックイベントのバインドを解除して再度バインドします。

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

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

} 
+0

パーフェクト。これは機能します。 @ Shyjuさん、ありがとうございました。 – JGreasley

+0

@JGreasley:それはあなたを助けてくれてうれしいです。 – Shyju

1

エラーコードのこの特定の領域にあるとは思えない...しかし、それを見て、それはあなたがRefreshServer()関数内$('#' + btn)ためclickハンドラを設定しているようです。通常はクリックで複数のAJAX呼び出しが発生する可能性がある理由は簡単です。同じイベントで複数のイベントハンドラをアタッチしているからです。

これは、同じbtnインスタンス上でRefreshServer()関数を複数回呼び出すと、その関数がハンドラを割り当てるために発生します。あなたのコードでそれが起こっている可能性はありますか?どういうわけか、それぞれのクリックで何らかの形で呼び出しているので、イベントハンドラの別のインスタンスをボタンに追加すると仮定しています。

+0

こんにちは@リチャード、他のコードは、VBコードから離れて呼び出され、それはAJAX呼び出しでのみ初期化されます。あなたの2番目のポイントは確かに最も論理的なようです。しかし、ボタンごとにハンドラを1つだけ割り当てる方法はわかりません。 (特に、そのボタンがユーザーが好きなだけ何回もクリックされる場合)。 – JGreasley

+0

私はここで手足に出て、 '関数RefreshServer()'を宣言するときに、開き括弧の直後に 'alert( 'foo');を置くことを提案します。次に、ボタンをクリックしてください。この関数がクリックで呼び出されると、 'alert()'を得ることになり、それが私たちの犯人になるでしょう。 –

+0

あなたの時間のおかげでリチャード。 @Shyjuは、イベントのバインドを解除することによって動作するソリューションを思いついた。私は次の研究分野がどこにあるのか知っているように見えます。再度、感謝します。 – JGreasley

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; 
       } 
      ); 
     } 
    }); 
}); 
関連する問題