3

私は ajax を使用する初心者であり、完全に非同期であると常に考えていました。しかし、ページのリロードやページの変更 (ハイパーリンクのクリックなど) によって呼び出しが中断される可能性があることを発見しました。私は、ajax 呼び出しが開始されると、ブラウザーが後で何をしても実行されるという印象を受けました。それは間違っていますか?

ここで、私が抱えている特定の問題について説明します。ユーザーが (テキスト ボックスに入力して) 質問に答えるオンライン テストを考えてみてください。テキストボックスがフォーカスを失うと、テキストボックスの値を DB に永続化する ajax 呼び出しがトリガーされます。これは、テキストボックスを変更するときにうまく機能します。ただし、別のページへの投稿アクションをトリガーする送信ボタンもあります (送信ボタンです)。テキストボックスに何かを入力してからボタンをクリックすると、呼び出しが実行されません。さらに、テキストボックスに入力し、別の場所をクリックして(呼び出しもトリガーします)、送信ボタンをすばやくクリックしても、呼び出しは行われません。それは期待される動作ですか?

そもそも ajax を使用している理由は、値を永続化するためです。そのため、ブラウザーのクラッシュなど、予測できないことが発生した場合、既に入力されたテキストは既に保存されています。

私の考え方は間違っていますか?この問題をどのように解決しますか?

お時間をいただきありがとうございます!

4

2 に答える 2

2

AJAX非同期です。

AJAX 要求を送信すると、JavaScript エンジンがそれを送信し、応答のハンドラーを設定します。

ただし、AJAX 要求をサーバーに送信し、それを受信する前にページから移動しても、何も起こりません。なんで?ページが読み込まれるたびに Javascript 環境全体が破棄され、再初期化されるため、最後のページで何が起こったのかわかりません。

あなたの問題については、フォーム送信アクションを傍受し、データで必要なことは何でもしてから、フォーム送信します。

編集:あなたのコメントに応えて。あなたは正しいです。ajax リクエストが送信され、その戻り値に依存していない場合は、問題になりません。

問題をFirebugでデバッグして、AJAX 呼び出しが本当に適切に送信されているかどうかを確認し、サーバーが適切に処理していることを確認することをお勧めします。

于 2010-02-22T21:12:40.867 に答える
1

永続的なローカル ストレージで何か特別なことをしない限り、現在のページに新しいページが読み込まれると、すべての JavaScript と ajax 呼び出しが吹き飛ばされます。また、フォームで送信が行われたとき。

ページ内のものを保存するには、できるだけ早くデータを保存してください。たとえば、おそらくフォーカスを失うだけでなく、タイマーを使用して定期的にキーアップを保存します。

ページの再送信: クリック時の動作を最初に保存してから新しいページに移動するように変更します。

あなたが見ている効果はすべて正常です。

また、遅いブラウザー (つまり 6 または 7) と速いブラウザー (chrome) の両方で必ずテストしてください。

于 2010-02-22T21:11:38.887 に答える