#はじめに
Ajaxで取得した値を使用してjs上で処理を行いたかったのですが、js上の処理を先に行ってしまうためうまくいきませんでした。
引っかかった部分のメモとして残しておきたいと思います。
#非同期処理
非同期処理は別のタスクを順番を待たずに同時に実行できるというものなので、普通に書くと書いた順番は関係なく実行されていきます。
試しにthenやdoneで順番を変えられないかやってみたのですがうまくいきませんでした。
#方法①:async: false
を使用
以下のように先に行いたいAjaxの中にasync: false
を追加して同期処理に変更する方法があります。
ただ、jQuery 1.8以降では非推奨となっているようです。
//js上の処理を行うfunction
function doSomething(){
getflgAjax().done(function(data){
if(data){
//フラグがtrueの時の処理
}else{
//フラグがfalseの時の処理
}
}).fail(function(){
//失敗したときの処理
});
}
// フラグを取得するAjax
function getflgAjax(){
return $.ajax({
type : 'post',
url : url,
dataType: 'json',
async: false,
})
}
#方法②:$.Deferred()
を使用
①は非推奨なので$.Deferred()
を使用するべきなのですが、当時試してみてうまくいかなかったため①の方法で妥協してしまいました。。
参考:
jQueryのDeferredが便利過ぎた
はじめてajaxを使うときに知りたかったこと
#まとめ
これまでAjaxの処理を行う順番というのを意識したことがありませんでした。
今ぱっと試せる環境がないのですが、手が空き次第環境を作って$.Deferred()についてもちゃんと勉強してここに追記したいと思います。