3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ajaxを順番に実行させたい

Posted at

#はじめに
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()についてもちゃんと勉強してここに追記したいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?