に私は自分のサイト上のナビゲーションバーを抱えている、それはいくつかのチェーンで構築されています:Ajaxのコールバックはチェーン
// in Init method
nav
.hideContainer()
.fetchData()
.buildHTML()
.eventify()
.showContainer();
それはOKだ、と私のために正常に動作します。しかし、fetchData
メソッドでは、ロードするためにローカルデータを使用します(インラインjson)。しかし今、私はリモートデータを取得する必要があります(ajax呼び出しから)。 Init
メソッドを変更せずに変更することはできますか?
私は、同期AJAX呼び出しでこれを行うための試みだった:それは遅いだと、
// in fetchData() method
var data;
$.ajax ({
async: false,
url : '/some/url/',
success : function(res) {
data = res;
}
});
return data;
をしかし、私は知っている - それはロードている間、それはブラウザをブロックしています。
私は、このような方法でのように、私のInit
方法を変更することができることを、知っている:
nav
.hideContainer()
.fetchData(function(){
nav.buildHTML().eventify().showContainer()
});
しかし、私はInit
方法を変更しないで欲しい、私はこれを行うことができますか?
P.S.私はDeffered
オブジェクトの方向に行かなければならないと思う。私は正しい?
いいえ、initをそのままにすることはできません。*と*は非同期で動作するajaxを持っています。それが非同期的であるという点は、即座に戻るため、Initはそのようには動作しません。 – kubetz