Ajax.Request使用時のコールバック順序
Ajax.Requestを使うとき(というか正確にはXMLHttpRequestを使うときかな)、リクエストの進捗報告のためにいくつかコールバックポイントがあるけど、これのコール順序がGETとPOSTで違ってはまった。しかもIEだけでFirefox(1.5.0.4)とOpera(8.54)は正常。OSはWindows XPで。
最終的には以下のようにアラートしまくってコールされる順序を調べてみました。
function init() { $('formid').onsubmit = function() { $('success').style.display = 'none'; $('fail').style.display = 'none'; var url = '/path/to/request/url'; new Ajax.Request( url, { method: 'post', asynchronous: true, parameters: Form.serialize(this), onLoading: function() { alert('loading'); $('indicator').style.display = 'block'; }, onLoaded: function() { alert('loaded'); }, onInteractive: function() { alert('interactive'); }, onComplete: showResult, onSuccess: function() { alert('success'); }, onFailure: function() { alert('failure'); }, onException: function() { alert('exception'); } } ); return false; } } function showResult() { } <body onload="init()">
結果はこんな感じ。
GET : loading -> loaded -> interactive -> success -> complete
POST: 同上
GET : loading -> interactive -> success -> complete
POST: 同上
GET : loaded -> interactive -> success -> complete -> loading
POST: loading -> loaded -> interactive -> success -> complete
-
- -
IEはキャッシュが効いてていきなりloadedになるのかとか考えてみたけどいまいち説得力がなく。
プログラム的にやり方が間違ってるのかとも考えてみたけどよくわからず。
まあ、POSTでちゃんと動くっぽいからとりあえずいいか。