0

JQueryを使用してAJAX呼び出しを実行しているときに、ユーザーにダイアログを表示しようとしています。ページの他の部分はデータに依存しており、「成功」フィールドに必要なすべてのコードを含めることができないため、「async:false」の呼び出しが必要です。

FirefoxとOperaを使用すると、ダイアログボックスは正しく表示されますが、IEとChromeでは、ページが完全にレンダリングされるまで待機し、ダイアログボックスはまったく表示されません。これは実際の実装にかなり近いサンプルです。これは私が関係する最小限にまでそれを取り除こうとしたはるかに大きなプロジェクトです。

http://jsfiddle.net/mcraig_brs/eNMna/

ajax呼び出しを開始する前にダイアログを表示し、完了したらダイアログを閉じる方法を見つけたいと思います。AJAX呼び出しは「async:false」のままでなければなりません。これは可能ですか?どうすればこれを行うことができますか?

どんな助けでもいただければ幸いです。最終的な答えは、IE8 / 9、Firefox、およびChromeで機能する必要があります。OperaとSafariはボーナスになります:)

応答の1つに応答して、私はフィドルを変更して、私が何を意味するかを示しました。

http://jsfiddle.net/mcraig_brs/BBhdS/

4

2 に答える 2

1

ドキュメントの準備ができたら、すべてのコードを実行してみてください。

$(function(){
  var page = new pageManager();
  page.LoadData();
});

$("#dialog")ドキュメントの準備が完了する前にコードが実行されると、要素がまだ準備されていないため、jQuery の一部のセレクター (たとえば、 ) が効果を発揮しない場合があります。ブラウザがページを構築する方法と、要素の順序付け方法などによって異なります。

于 2012-06-11T19:13:04.937 に答える
0

ここでの問題は、jQuery UI のダイアログを開く関数自体が非同期で実行されることです (ダイアログを開くときに発生する必要があるアニメーションを処理するため)。したがって、これを正しく実行するには、コードをdialogopenイベント ハンドラーで実行する必要があります。

実際の例- http://jsfiddle.net/tj_vantoll/YR7RC/

そうは言っても、同期 XHR リクエストの使用は強くお勧めしません。長期的には、コードの保守性が大幅に低下します。jQuery の deferreds を使用すると、複数の関数をキューに入れ、AJAX 呼び出しの完了後に実行できます。この手法については、 http://rmurphey.com/blog/2010/12/25/deferreds-coming-to-jquery/に優れた記事があります。

于 2012-06-12T01:16:27.260 に答える