2010-11-30 4 views
14

私はjQueryの同期AJAX呼び出しについて別の質問を読んでいた、と私は思ってになった:同期型Ajaxを使用するのはいつ適切ですか?

必要な/有益なAJAX呼び出しの同期バージョンを作るどのような状況?

理想的には、例を挙げたいと思いますが、なぜ同期が標準のajaxよりも優れているのですか。

+0

IMHO決して:-)私はまだ "どんな状況でも有効な仕事を見つけよう"との良い議論を見いだすことはできませんでしたが、ここにいる人々が間違っていることを証明できると確信しています – wajiw

+1

私は、あなたの質問は論理的矛盾です。 –

+2

@Nathan Taylor私は、AJAXがjQueryの誤称であると言いました。それは、同期または非同期、xml、json、html、または何でもかまいません。他の言語では、通常「URL要求」と呼ばれます。我々がそれを呼び出すと、情報のない外部の人たちは、新しい無意味な言葉を投げつけることはありません。 – zzzzBov

答えて

20

私は(それは別の方法を中心に仕事をすることはできません)あなたは必要それが同期するか、ページを上に移動すると、要求がする場所、window.onbeforeunloadに呼び出しを行っていると考えることができる唯一の合理的な例決して完了しない。

標準/非同期動作を使用しているこの特定のケースでは、リクエストが早過ぎて影響を受けることが早すぎるか、またはサーバーに問い合わせることが確実です。

私はこれをやっていると言っているわけではありませんが、それはまったく反対です(ユーザーの閲覧速度に悪影響を与えます)。しかし、ここにはあまり選択肢がありません。

+0

以前の仕事でいくつかのトラッキングコードをテストしたときの結果に基づいて、いくつかのバージョンが戻ってきたと思います(おそらく2,3年前)、Chromeはonbeforeunloadから非同期AJAXをページの後の背景は既にアンロードされていました。私は他のブラウザーがそれに従っているかどうかは分かりませんが、うまくいけば、そしていつかこの答えは時代遅れになるでしょう。 –

-4

私はいくつかのajax呼び出しを実行したいが、別の呼び出しの結果に依存する呼び出しが1つあるシナリオでは良いと思います。それらを同期して実行すると、独立呼び出しが終了するまで待ってから従属呼び出しが起動します。

+1

-1非同期呼び出しは、連続した順序で発生するように簡単にキューに入れることができます。一般に、[Promises](http://en.wikipedia.org/wiki/Futures_and_promises)は、前回のコールバックが成功したときに各非同期コールバックが特定の順序で発生するように、パスの失敗条件をキューに入れるために使用されます。さらに、コールバックの個別またはグループとしてのエラー処理を簡単に含めることが容易になります。 – zzzzBov

+1

約束がなくても、単純なコールバックを使うことができます。 – Brandon

-2

同期ajaxは、クライアント側コードの処理をさらに続行するために必要な値をサーバーから取得するためによく使用されます。そのような場合、Ajax呼び出しは、呼び出しが目的の値に戻るまでブロックされます。例:

javascript関数は、従業員の給与を計算する必要があります。 STEP1:フォーム STEP2から従業員IDを取得:彼の給料/時間 STEP3を取得するためにemp.idを渡し同期サーバーの呼び出しを行います。乗算あなたが見ることができるように、サーバーコールが終了しない限り、合計給与は計算できません。これは、シンク関数でなければなりません。ただし、jqueryを使用する場合は、onSuccessを非同期に計算することができますあなたが給料を表示するメッセージボックスを持っている場合、処理はこれで続行されます、それは空に見えます...

+2

申し訳ありませんが、これは完全に間違っており、誤解を招くべきではありません。あなたが言及した場合、コールバックや約束を使用することができます。それは、同期AJAXとは関係ありません。一方、JSが何かを処理することができたらどうなりますか? AJAXを同期させると、タブがフリーズします。 – ducin

+1

合意しましたが、これは貧弱なアドバイスです。これがコールバックが存在する理由です。この場合の同期AJAXは、コールバックの作成を避けるための安価な/簡単な/簡単な修正です。 – Brandon

+0

@Brandonしかし、非常に多数の入れ子にされたコールバックを持ち、同期を見るために必要な関数を持っているとき、それは非同期的にその動作をしようとしています。 – Michael

関連する問題