問題タブ [jquery-deferred]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 背景画像の読み込み遅延によってページ読み込み時に白い「フラッシュ」が発生するのを防ぐにはどうすればよいですか?
問題は、Web 上のほとんどのサイトに背景画像があることです。読み込みに時間がかかります。通常、画像が最適化され、十分に小さければ問題にはなりません。ただし、一部のサイトでは、フッターにあるにもかかわらず、JavaScript ファイルがページの他の何よりも先に読み込まれます。これにより、背景画像が読み込まれる前に白い「フラッシュ」が作成されます。javascript が他の何よりも先に読み込まれるのはなぜですか? 多くのサイトでこの問題が発生しており、どこでも見られます。私が現在取り組んでいるサイトは次のとおりです。
http://www.bridgecitymedical.com/wordpress/
ありがとう!
tl;dr Web サイトでの JavaScript の読み込みを延期して、背景画像が何よりも先に読み込まれるようにするにはどうすればよいですか。これにより、ブラウザが画像のダウンロードを完了する前に白い「フラッシュ」が発生するのを防ぐことができます。
jquery - jQuery.Deferred() について
私はDeferredでいくつかのユースケースを研究しており、次の指示に従いました:
わかりません。どのような条件で呼び出してreject()
から直接呼び出しpromise()
ますか?
つまり、遅延オブジェクトを拒否したい場合、拒否された遅延オブジェクトはどのように約束を表すことができるのでしょうか?
jquery - jquery:遅延オブジェクトを「then」に渡すとどうなりますか?
私はしばらくjquery遅延オブジェクトを研究してきましたが、1つのことに困惑しています。
「done」、「always」、「then」などのメソッドは、遅延オブジェクトが解決されたときに呼び出される関数を引数として取ります。
ただし、遅延オブジェクトを「always」メソッドに渡すことでリクエストをチェーンしようとしましたが、それもうまくいくようです:
ただし、実際には機能しません。上記のコードを次のように実行すると、次のようになります。
foobar は、配列の最後の要素が処理された後ではなく、ランダムな時間に呼び出されるようです。
どんな時に使った方が良いですか?
上記のコード (「when」を使用) では、ajax リクエストが次々に発生するのでしょうか、それとも同時に発生するのでしょうか?
ところで、「パイプ」を使ったチェインも検討しましたが、スコーピングの問題から、上記のように for ループで「パイプ」を使うのは難しいと思います。
また、元のコードが「ほぼ動く」のはなぜですか?そこで何が起こっているのですか?遅延オブジェクトを関数のように実行していますか? また、実行するとどうなりますか?
javascript - カスタムjavascriptオブジェクトでjQueryの遅延オブジェクトを使用するには?
.start()
私は、プロトタイプが引数として2つのコールバックを取るメソッドで拡張された標準のjavascriptオブジェクトを持ってsuccess
います:failure
それぞれ。このメソッドは非同期処理 (AJAX ではありません) を実行し、この処理の結果に応じて、成功または失敗のコールバックを呼び出します。
これを図式化する方法は次のとおりです。
メソッド内で実行される正確な処理はそれほど重要ではなく、非同期で非ブロッキングであることだけが重要です。start メソッドが処理を終了する時点を制御することはできません。また、このメソッドのプロトタイプと実装を制御することもできません。
私が制御できるのは、success
およびfailure
コールバックです。それらを提供するのは私次第です。
これで、これらのオブジェクトの配列ができました:
この配列の要素の順序は重要です。配列の各要素でメソッドを連続してトリガーする必要がありますが.start()
、前の要素が完了した (つまり、成功のコールバックが呼び出された) 場合のみです。エラーが発生した場合 (失敗コールバックが呼び出された場合)、実行を停止し、配列の残りの要素に対して .start メソッドを呼び出さないようにします。
再帰関数を使用して、これを単純に実装できます。
これは問題なく動作しますが、jQuery 1.5 で導入されたjQuery の deferred Objectを見ると、このコードには改善の余地があると思います。残念ながら、私はまだそれに慣れていません。私はそれを学ぼうとしています。
私の素朴なコードを適応させて、この新しい API を利用することは可能ですか?
これが私の実装のjsfiddleです。
javascript - 解決されたjQuery.Deferred()から値を取得する方法は?
これが私の基本的な状況です:
done
延期されたオブジェクトがすでに解決されている場合は起動しないため、最後の行は機能する場合と機能しない場合があります。私はこのようなことをしたいと思っています:
すでに解決された値を取得するにはどうすればよいjQuery.Deferred()
ですか?
jquery - jQueryの遅延パイプを使用する最も簡潔な方法は何ですか?
私は自分のRESTAPIをラップするjavascriptAPIを設計しています。私は一般的に、多くの冗長で紛らわしいネストされたコールバックを避けたいと思っており、DeferredjQueryの良さを読んでいます。
人のオブジェクトと人のオブジェクト間を移動する方法を表す私のライブラリ「myLib」を想像してみましょう。'dad'、'boss'、'assistant'などのメソッドがたくさんあり、データを見つけて別の関連する'people'オブジェクトを返すためにajaxリクエストを実行する必要があります。しかし、私は彼らに、私が一緒にチェーンできるmyLibのメソッドも持つ遅延オブジェクトを返してもらい、次のような非常に簡潔なコードを記述してもらいたいと思います。
これにより、「me」personオブジェクトが作成され、最初のajax呼び出しを実行して私の詳細を検索し、そのデータを使用して別の呼び出しを実行して私の親を検索し、次にもう一度上司を検索し、次に別の呼び出しを実行してアシスタントを取得します。最後に、それは私のコールバックに渡され、私はそれを処理します。jQueryの連鎖トラバースメソッドに似ていますが、非同期です。
関数を任意の時点(通常は最後のメソッド)に渡すと、チェーン内の最後のDeferredオブジェクトが解決されたときに内部的に呼び出されます。2番目の関数は失敗コールバックであり、チェーン内の遅延オブジェクトのいずれかが拒否された場合に呼び出されます。
jQueryの遅延オブジェクトを作成して拡張する必要があると思いますが、それが「最善の」方法かどうかはわかりません。
では、ミニマリストAPIの目標を達成するためのベストプラクティスの方法は何ですか?基本的に、すべてのメソッド名をドメイン問題の名前空間で100%にし、「when」、「done」、「success」などの多くで汚染されないようにします。
そして、どこかでエミュレートできる同様のクリーンなAPIの例はありますか?
jquery - Jquery-jsonpプラグインと延期されたオブジェクト、延期されていない
jQuery Deferred ObjectsでjQuery-jsonpプラグインを使用しようとしていますが、今のところ運がありません。
目標は、APIを呼び出し、データを取得してそれらを詳しく説明することです。同じ呼び出しを使用して、さまざまな目的でさまざまなデータセットを取得して精緻化するため、各精緻化関数で同じAPI呼び出しを明示的に繰り返さないように、コードを次のように構成しました。
問題は、Julian Aubourgのプラグイン( http://code.google.com/p/jquery-jsonp/ )の$ .getJSON()を$ .jsonp()に置き換えて同じアプローチを試しましたが、延期が機能しないことです。
これにはいくつかの制限があり、変更できません。
*API呼び出しはJSONPを使用する必要があります。
*エラーを検出できる必要があります(種類に関係なく)。したがって、これまでに見つけた唯一のソリューションであるjQuery-jsonpプラグインを使用します。
私はjQueryDeferredObjectを研究し、jQueryフォーラム、Stackoverflow、およびWebの深さを検索し、プラグインページのすべてを読みました。私はいくつかのアプローチを試しましたが、これまでのところうまくいきませんでした(延期されたものがそこにさえなかったかのようです)。私の仮説は、遅延はjquery-jsonpプラグインでは機能しないというものです。これは、その構造(エラーをキャッチできるようにするため)と、$。jsonp自体が$ .ajaxのように遅延されていないためですが、私は決して専門家ではないので、この素晴らしいコミュニティからのアドバイスが必要です。
私が見つけた解決策の1つは、関数をパラメーターとしてcallAPI関数に渡すことです。これにより、成功すると、自分自身を繰り返すことなく、必要なものを実行できます。
したがって、私のcallAPI関数は次のように変更されます。
しかし、エラー管理の必要性は開発段階の後半に出てきて、初心者である私はそれについて以前は考えていなかったので、これは大量のコードを書き直すことを意味します。したがって、誰かがjquery-jsonpプラグインで遅延を使用することに成功した場合、それを知っておくとよいでしょう。
皆さん、ありがとうございました。
フラビア
jquery - 単一の遅延オブジェクトで jQuery.when を使用する必要がありますか?
次のコードがあるとします。
この例では、単一の deferred が解決されるのを待つだけで済みます。この場合、2 番目の関数を上記のように書くことと、次のように書くことの違い (もしあれば) は何ですか?
つまり、jQuery の遅延オブジェクトを使用していることが明確になるので、最初の方法で書くのが好きですが、この場合に必要かどうか知りたいです。
編集: then() 呼び出しのタイプミスを修正しました。それをキャッチしてくれてありがとう。
編集:nbinowitzさん、回答ありがとうございます。when() を使用することと、生の jQuery 遅延オブジェクト インスタンスを使用することに関して、私が確信を持っていなかったポイントを釘付けにしたと思います。遅延オブジェクト全体ではなく promise を返すようにコードを再度修正しました。それが私が実際のコードで行う方法ですが、ここに追加するのを忘れていました。
jquery - 遅延オブジェクトの配列の処理
使用して以来$.Deferred
、このシナリオに数回遭遇しました。それぞれが何らかの方法で遅延オブジェクトを生成する値のリストを持っており、すべての遅延オブジェクトが解決されたらコールバックを実行したいと考えています。
より具体的な例は次のようになります。
私の例のコードよりも洗練されたソリューションはありますか?
javascript - jQuery $ .when()と変数引数
[1、n)AJAX-requestsをサーバーに送信したいのですが、結果が返されたら、モーダルダイアログを閉じる必要があります。$.when(a(), b(), c())
完璧ですが、関数の変数カウントをパラメーターとして渡す方法がわかりません$.when
。この問題を解決する方法はありますか?