0

このアプリケーションでは、最後の送信ボタンでajax呼び出しを行い、進行状況バーを含むモーダルダイアログを表示しています。処理が成功すると、ダイアログが応答で更新されます。ここでの私の要件は、モーダルダイアログを非ダイアログに変更し、ajax呼び出しが終了している間にユーザーが別のページに移動できるようにすることです。

モーダルウィンドウを非モーダルウィンドウに変更した場合の影響は何ですか。ajax呼び出しは引き続き続行されますか、それとも中止されますか。続行する場合は、ダイアログを参照して応答で更新します。

ご意見をお聞かせください。

4

2 に答える 2

1

ビューの操作に関してAJAX呼び出しが行われている間に何をしても、AJAX呼び出し自体には影響しません。AJAX呼び出しを完了させ、コールバックに変更を表示する限り、問題はありません。言うまでもなく、実際のページを変更することはできませんが、私があなたのことを正しく理解していれば、とにかく変更しません。

于 2012-08-14T03:17:03.977 に答える
1

アイデアを試す簡単な実験

別のページへのリンクを含むHTMLページがある簡単な例を作成しました。そのリンクをクリックすると、長いプロセス(10秒待機)をシミュレートするPHPスクリプトにAJAXリクエストが送信され、セッション内の変数が変更されます。次に、ターゲットページはその変数をエコーし​​ます。

そのリンクをクリックすると、ページは長いAJAXリクエストを開始しますが、別のページにも移動します。その結果、AJAXリクエストはキャンセルされ、他のページには「何も」印刷されません。

これがserver.phpです:

session_start();
$x = isset($_SESSION['x']) ? $_SESSION['x'] : 0;
sleep(10); /* simulates long process */
$_SESSION['x'] = ++$x;
echo $x;

index.html(重要な部分):

<a href="other.php">Click here</a>

index.html(<script>タグ内)のAJAXリクエスト:

document.querySelector('a').onclick = function(e) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function(e) {
      console.log(JSON.parse(xhr.responseText));
    }
    xhr.open('POST', 'server.php');
    xhr.send();
  }

考えられる解決策

サーバーでのみリクエストに時間がかかる場合は、そのプロセスの進行状況を返すエンドポイントを作成してから、すべてのページにjavascriptコードを追加して、このエンドポイントを使用し、進行状況をユーザーに表示します。

于 2018-10-05T20:28:44.100 に答える