- 締切済み
jqueryのwhenを使って、複数のサーバーから
jqueryのwhenを使って、複数のサーバーからjsonを取得するプログラムを作っています。 ソースは以下のような感じです。 $.when( getJsonFromA(), //$.ajaxをreturnしてるだけ。 getJsonFromB(), getJsonFromC() ).done(function (dataA, dataB, dataC)){ /*取得後の処理*/ } 現状はこれでよいのですが、今後、取得対象が増える(DやEが増える)度にソースをいじりたくないと考えてます。 コンフィグなどからURLを読み込んで、その宛先からjsonを取得する。といった、形を whenで記述できますか? おおざっぱな質問で申し訳ないですが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Gotthold
- ベストアンサー率47% (396/832)
Deferred ($.ajaxの戻り値など) をいったん配列に格納して、 whenにはapplyを使って引数を渡し、 done Callbackの引数はargumentsで取得してください。 以下のページが参考になると思います。 JavaScript - 結果の順番を保証して、且つ『並列』でAjax通信を行う方法 - Qiita http://qiita.com/YusukeHirao/items/bca14c5f2fe4026fd4d7
>コンフィグなどからURLを読み込んで、その宛先からjsonを取得する。といった、形を whenで記述できますか? 必要に応じてコンフィグからアクセス先を読み込んでajaxする、というのは可能でしょう。が、whenを利用する場合、doneにあらかじめ呼び出すajaxだけ引数を指定しておきます。この部分は事前にスタティックに記述されてないといけないので、普通のやり方では難しいような気がします。 (javascriptのコードをダイナミックに生成してevalするようなやり方ならできるかもしれません。試してませんが) ところで、根本的な話になりますが、「複数のサーバーから」とありますが、それらは、あなたのサイトからのajaxアクセスを許可してもらっているところですか? JavaScriptによるajax通信の場合、クロスドメイン通信は相手側があなたのサイトを許可していなければできない仕様になっています。そのへんは大丈夫ですか?
お礼
ご回答ありがとうございます。 どうやら、ajax 部分は「when + apply」、 doneの引数部分は「arguments」でなんとかなりそうです。 心配いただいた、クロスドメイン通信に関してですが、すべて管理下にあるサーバが対象ですので、問題はありません。 本当にありがとうございました。 ※扱いになれておらずベストアンサーを選ぶ前に締め切ってしまいました。すみません…。
お礼
ご回答ありがとうございます。 applyですか、これは盲点…。 参考サイトは、whenについて調べた際に何度か見かけたのですが、 「順序保証はあまり関係ないかなぁー」とスルーしてました。 これで、やりたいことができそうです。 ※他の方のお礼にも書いたのですが、誤って ベストアンサーを選ぶ前に締め切ってしまいました、すみません。