2012-01-11 2 views
1

}私はこの簡単なコードを持っていますが、ライブリンク(click :)ではajax()を通じて外部リンクが呼び出されます。唯一のAJAXに発砲機能({成功:})ここは、live({and ajax({beforeSend:成功した後にすべての発射を取得します:

コード:

$('.ajaxLink').live({ 
    click : function(e) { 

     $this = $(this); 
     var myLink = $this.attr('href'); 
     var myId = $this.attr('id'); 

     e.preventDefault(); 
     $('html,body').animate({ // this is fired only AFTER content load 
      scrollTop : 0 
     }, 1500); 

     $.ajax({ type: 'GET', 
      url: myLink, 
      async: false, 
      dataType: 'html', 

      beforeSend : function() { 
       caricaModal.open(); // this is also fired only after content load 
      },      // is just an animation on a div. 

      success : function(page) { 
       caricaModal.close(); // this is fired at good timing 

      // some more code here where I insert (page) in the DOM 

      } 
     }); 

    } 

}); 

あなたは、これは、それは、約1.5秒かかりページをロードするのにかかるどのくらいの時間だろう場合は、はい、実際には何かがクリックされてDOMにロードされてDOMにロードされる前に何も起こらないということです。

答えて

0

これは、同期ajax呼び出しがブラウザをロックして、.animateによって作成されたアニメーションスレッドを一時停止するためです。 .animateに電話すると、ブラウザは次の($ .ajax)文を評価する前に終了するのを待たないので、sajaxコールはサーバが応答するまで効果的に一時停止します。 ayaxコールを.animateのコールバックに入れてみるか、async: falseオプションを削除してみてください。

+0

これはasync:とbeforeSend:は一緒に暮らすことができないことを意味しますか? – Daniele

+0

Hmmm。それはそれが見えるものですが、あなたがそれを証明できなければ、あなたは確信できません。しかし、それは意味をなさないようです。 – karim79

関連する問題