[解決済み] jQuery Deferredsの配列はどのように扱うのですか?重複
質問
ルート URL、スキーマ、そして最後にさまざまなデータオブジェクトのスキーマと URL でアプリケーションを初期化する、という順序でデータを読み込む必要があるアプリケーションを持っています。 ユーザがアプリケーションをナビゲートすると、データオブジェクトが読み込まれ、スキーマに対して検証され、表示されます。 ユーザがデータをCRUDするとき、スキーマはファーストパスの検証を提供します。
初期化で問題が発生しました。 私はルートオブジェクト、$.when()を取得するためにAjaxコールを使用し、次に各スキーマオブジェクトのために1つの約束の配列を作成します。 それは動作します。 私はコンソールでフェッチを見ます。
それから私はすべてのスキーマのためのフェッチを見るので、各$.ajax()呼び出しは動作します。 fetchschemas()は確かに約束の配列を返します。
しかし、その最後のwhen()句は決して発射されず、コンソールに"DONE"という単語は決して表示されません。jquery-1.5 のソースコードでは、$.when.apply() に渡すオブジェクトとして "null" が受け入れられることを示唆しているようですが、これは when() がオブジェクトが渡されない場合にリストを管理するために内部の Deferred() オブジェクトを構築するためです。
これはFutures.jsを使用して動作しました。 もしこのようにならないのであれば、jQueryのDeferredの配列はどのように管理されるべきでしょうか?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});
どのように解決するのですか?
あなたが探しているのは
$.when.apply($, promises).then(function(schemas) {
console.log("DONE", this, schemas);
}, function(e) {
console.log("My ajax failed");
});
これも動作します(いくつかの作業値については、壊れたajaxを修正することはできません)。
$.when.apply($, promises).done(function() { ... }).fail(function() { ... });`
を渡したいでしょう。
$
の代わりに
null
というように
this
の中に
$.when
を参照しています。
jQuery
. ソースにとってはどうでもいいことですが、これは
null
.
全ての$.ajaxを以下のように置き換えてモックアウトします。
$.when
で置き換えて、サンプルの
が動作します。
ということは、ajaxリクエストに問題があるか、fetch_schemasに渡す配列に問題があるということです。
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] jQueryを使用して配列から特定の値を削除する方法
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 選択オプション「selected」を値で設定する
-
[解決済み] Twitter Bootstrapのモーダルウィンドウを閉じないようにする
-
[解決済み] jQueryを使用してCSSのdisplay noneまたはblockプロパティを変更するにはどうすればよいですか?
-
[解決済み] jQueryの複数要素の同一クリックイベント
-
[解決済み] Deferredsの配列を$.when()に渡す
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] jQueryでval()がchange()をトリガーしない
-
[解決済み] jQueryで、ある要素を他の要素に対して相対的に配置するには?
-
[解決済み】jQuery deferredはどのように使用することができますか?
-
[解決済み] jQueryを使用して文字列から最後の文字を削除する方法は?