JQueryでAjax通信時に、abort()でキャンセルを行うと通信はキャンセルになっているようですが、
サーバー側(Ajaxで呼ばれた処理)は、最後まで処理されてしまいます。
abort()を実行させた時に、サーバー側の処理まで中断させる方法はありますでしょうか?
実行と中止は以下のような感じで書いています。
Ajax実行
arrXhr = $.ajax({
dataType: "json",
type: "POST",
url: "xxxxxxx.php",
async: true,
cache: false,
data: sendData,
success: function ( data ) {
},
error: function ( XMLHttpRequest, textStatus, errorThrown ) {
}
});
中止
xhr.abort();
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
環境に依ると思いますが可能です。
例えば、以下のPHPのスクリプトは60秒間動作しますが、ブラウザ側で読み込みを中止(×をクリックする等)すると、すぐに停止します。(test.txtの更新が止まる事で確認できます。)
<?php
$fp = fopen('test.txt', 'w');
for ($i = 0; $i < 60; $i++) {
@fwrite($fp, 'A');
sleep(1);
print("\n");
}
fclose($fp);
?>
Apacheは、レスポンス時にクライアントとの接続が中断されていると、当該プロセスを終了させる、という動作をするためです。
スクリプト内の“print("\n");”で定期的に出力させているのはそのためです。この“print("\n");”が無い場合は、ブラウザ側の読み込みを中止しても60秒間動作し続けます。(text.txtの更新が60bytesになるまで止まりません。)
ecaihさんが実現したい“abort()を実行させた時に、サーバー側の処理まで中断”についても、同様の方法で実現できると思います。
私が実際に行っているのは、Comet処理用のサーバ側スクリプトにて、サーバ側でのイベント発生を待つ間は定期的に改行"\n"を出力しています。改行であれば、JSONコンテンツへの影響が無いためです。
また、PHPでは試す事ができておりませんが、サーバ側の処理中断時に何らかの終了処理をさせたければPIPEシグナルを捕捉する事で実現できるかもしれません。Apacheがプロセスを終了させる際、当該プロセスにPIPEシグナルを発生させるためです。
※私の環境ではpcntl_signalが使えなかったため試せませんでしたが、本関数によりSIGPIPEを捕捉する事で試してみてください。
No.1
- 回答日時:
ブラウザ側の処理が止まってもサーバとしてはそれを関知出来ないので
処理は止まりません。
逆に考えると、何らかの方法でサーバに処理の停止を命令してやればいいので
大まかには
0.何らかの方法で任意の実行中の処理を停止するプログラムをサーバ側に書く
1.処理開始時にサーバで処理停止用のキー的なものを発行してブラウザに渡す
2.処理中断時にそのキーをサーバに渡して任意の処理を停止するリクエストを投げる
みたいな感じでしょうか。
他の人が走らせてる処理を止められないように考慮する必要があったりで
実際に作ると結構大変な気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript プラグイン無しでContactform7にdatepickerを実装 3 2022/10/25 02:18
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
要素内を常に一番下を表示させたい
-
JavascriptからPHPへのAjax通信...
-
jQueryを使いformでsubmitした...
-
C言語の 配列の中 出力について
-
変数にドットをいれることはか...
-
.txtファイルの読み込み
-
<input>のvalue値をプルダウン...
-
二つのbxsliderをレスポンシブ...
-
Selenium4でボタンをクリックで...
-
Googleマップに複数のピンを立...
-
フレーム内の要素へのXPATHはど...
-
リンク付きの画像をクリックす...
-
Javascriptを使ってQRコード読...
-
プルダウン内容に応じてラジオ...
-
カンマ区切りのデータを配列に...
-
AjaxでSJISファイル読み込みす...
-
Ajaxでフォームデータを連続登...
-
IndexedDB を使ってファイルア...
-
bxsliderで画像毎に表示時間を...
-
タブをフリックでスライドでき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルでのonreadystatechang...
-
要素内を常に一番下を表示させたい
-
jqueryでリンクを無効にしたあ...
-
jqueryのgetでJSPを呼び出したい
-
外部ファイルload処理完了して...
-
JQueryでAjax通信をキャンセル...
-
ある条件の画像のみ表示を切り...
-
Jquery で on/offボタンの実装...
-
AJAXでのリロードに関して
-
jqueryを使って非同期通信で10...
-
コールバック中の変数操作
-
Selenium4でボタンをクリックで...
-
Javascriptを使ってQRコード読...
-
JavascriptからPHPへのAjax通信...
-
IndexedDB を使ってファイルア...
-
同一ページ移動時ハンバーガー...
-
JavaScriptでtabindexの変更っ...
-
jQueryを使いformでsubmitした...
-
SQLのmaxで求めた値を変数に代...
-
カンマ区切りのデータを配列に...
おすすめ情報