私は現在、restfullサービスからのデータにアクセスするために多くのajaxリクエストを使用するプロジェクトに取り組んでいます。一部の操作では、複数の順次呼び出しが必要です。私がこれらの最初のものを実装するとすぐに、私は競合状態に遭遇しました。 (ajaxCall_1を呼び出し、ajaxCall_1の結果を使用するが、ajaxCall_1はまだ戻っていない)。もちろん、私は.successプロパティを使うことができますが、それは私のためのトリックをしません。下の簡単な例で説明しましょう。私は含む.jsファイルを持っている:JQuery Promise question
function getServerBoolean(){
$.get('url_1',function(data){return data)});
}
function refreshWidget(){
$.get('url_2',function(data){
var serverBoolean = getServerBoolean();
--do some html building here based on boolean returned from server-- }
);
}
function setServerValue(newValue){
$.post('url',{key:newValue},function(data){
// server model has changed, so refresh widget.
refreshWidget();
});
}
私は(「someValueの」)setServerValeuを呼び出すたびに、ウィジェットが自身をリフレッシュする必要がありますが、これを行う前に、サーバーブール値を知る必要があります。このように私はより多くのsiutationsを持っているので、単にメソッドの引数としてコールバックを与えてから、それを.success()で呼び出すことは私のトリックをしません。
私は$ .when $ .then $ .doneメソッドを見つけましたが、自分の状況でこれらのメソッドを使用する方法がわかりません。これを設定する方法を手伝ってくれる人がいますか?
ありがとうございます!
リチャード
なぜ、.success()を使用してajaxCall_2を含む関数を呼び出すことができないのですか? –
私はサーバーへの多くのrest/ajax呼び出しを含むapiを持っています。これらのメソッドでコールバックを使用する場合は、コールバックで多数のネストされたコールが終了することになりますが、これはコードのメンテナンスのために必要なものではありません。その次に、コールバック関数をパラメータとして許可するようにすべてのメソッドを変更する必要があります。これもまた私が望むものではありません。apiを可能な限りきれいに保ちたいです。 $ .when()。これを完全に行います。 (それは私の魅力のように働く) – Bjarne77