0

私は完全な ajax Web サイトにまったく慣れていないことを認めているため、間違いを犯していることは間違いありません。

問題はこれです:http://lamovida.arabianessence.com

すべてのページは、この関数を使用して $.ajax 呼び出しで読み込まれます

function getAjaxPage() {
  $('a.ajaxc').click(function() {
$("li.page_block").find(".wrapper").fadeOut(400).remove();
  hideSplash();
  var $thishref = $(this).attr('href'),
      $thisurl = $thishref.replace("#!/",""),
      $urlArr = $thisurl.split('-'),
      $urlOk = $urlArr[0],
      $dataOk = $urlArr[1];

      $.ajax({
        url : $urlOk + ".php",
    data :  'id='+$dataOk,
    success : function (data,stato) {
      $("#content").css({opacity:1}).fadeIn(400);
      $("li.page_block").html(data);
      $("li.page_block").css('visibility', 'visible');
      $("li.page_block").find(".wrapper").css({opacity:0}).show().animate({opacity:1},1000);

                var $whgt = $(".wrapper").height(),
                    $ctop = ( ( $(window).height() - $whgt ) /2 )-40;

                $("#content").stop().animate({height: $whgt+40, top: $ctop},1000);
                $("li.page_block").css('padding-top',20);

                $('.scrollable').jScrollPane();
                $('.slider>ul>li').jScrollPane();

                getAjaxPage();
            },
            error : function (richiesta,stato,errori) {                     
                alert(errori);
            }
        });
  });
}

この関数が呼び出されるたびに、コンテンツのローダーが遅くなり、約 20 回のクリックの後、状況が悪化し、読み込み時間がどんどん長くなります。

Google Chrome のタイムラインを使用して状況を分析しようとしましたが、クリックするたびにブラウザーがより多くのメモリを使用することがわかりました。getAjaxPage(); にコメントすると 「成功」セクションの行で状況は改善し始めますが、もちろん、内部ナビゲーションはすべて失われます。

この問題を回避するにはどうすればよいですか?

みんなに感謝します!

4

1 に答える 1

2

を呼び出すたびに新しいイベント ハンドラ$('a.ajaxc').click()が追加されるため、クリックするたびにさらに多くのリクエストが行われます。最初のクリックの後、クリックごとに 2 つのリクエストが発生します。別のクリック?あと3つリクエスト。等。

ハンドラーを関数の外に置くと、クリックごとに AJAX 呼び出しが 1 つだけになります。

$(document).ready(function() {
    $('a.ajaxc').click(getAjaxPage);
});

また、コールバック内から再度呼び出す理由がわからないgetAjaxPageので、リクエストの無限ループを避けるためにも削除してください。

于 2013-02-11T15:14:39.057 に答える