0

シナリオ: ユーザーが投票できる Web アプリがあり、次の投票に進むとすべてが ajax で読み込まれます。ユーザーは以前の投票をクリックすることもでき、投票の詳細が ajax を使用してページに読み込まれます。私が抱えている問題は、ユーザーが以前の投票をクリックすると、最終的にページが一時的にフリーズすることです。これは 7/8 クリックあたりで発生します。最初の数回のクリックで、すべての新しい情報が非常に迅速に dom に読み込まれ、すべて問題ありません。ページがフリーズすると、20 ~ 25 秒後にフリーズが解除されます。

これはクリックを処理する js func で、js.erb ファイルを使用して新しい情報を dom にロードします。

$('.vote.complete').click(function()
{
    whence = "toCompleted";
    vote_id = $(this).data('vote_id');
    cid = $(this).data('campaign_id');

    c_title = $('#outfitPair'+cid).data('campaign_title');
    u_id = $('#outfitPair'+cid).data('other_id');

    //_gaq = window._gaq;

  //if(_gaq != undefined){
   // _gaq.push(['_trackEvent', 'ViewPreviousVote', c_title, u_id]);
  //}

    $('#outfitPair'+cid).find('.button.vote').removeClass('to-vote');
    $(this).addClass('to-vote');

    $.get('/campaigns/new_pair?whence='+whence+'&vote_id='+vote_id)

return false;
});

js.erb ファイルを調べるにはかなりの手間がかかります。多かれ少なかれ、調査できる考えられる原因の提案を探していますが、この小さな情報から正確な答えを期待することはできません.

編集:問題の手がかりを見つけたと思います。古い投票をクリックするたびに、それが行う ajax 呼び出しの数が 2 倍になるように見えます。

http://i.imgur.com/QnvaaBD.png

4

2 に答える 2

0

修理済み。私の js.erb ファイルでは、クリック ハンドラーを再度記述しましたが、古いハンドラーがまだバインドされていたのにバインドされていないと考えました。これにより、投票がクリックされるたびにクリックハンドラーの量が2倍になるため、複数のajax呼び出しが発生しました。コールバックからクリック ハンドラーを削除すると、すべてが期待どおりに機能するようになりました。

于 2013-08-08T15:38:16.250 に答える
0

あなたの編集に基づいて、AJAX が追加の呼び出しを行うのを防ぐために条件を追加します。

$('.vote.complete').click(function() {

if (!$(this).hasClass('loading')) {

     $(this).addClass('loading');

     $.get(url,function() {

          $(this).removeClass('loading');

     });

}

});
于 2013-08-08T15:32:11.333 に答える