![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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ランキング
-
バッチファイル 特定ウインドウ...
-
PDFを(htmlのように)無限に縦...
-
GASでスプレッドシートの一番上...
-
1枚の画像をクリックすると複数...
-
jQueryを使いformでsubmitした...
-
ワードでA3横の画面にして、文...
-
bxsliderで最初に縦に複数表示...
-
ダブルクリックと2回クリックの...
-
MMS機能とは
-
正規表現で、特定の文字列を含...
-
以下のURL入れますか?皆さんは↓
-
画像のドットの部分が抜けてい...
-
Chinapost こよパズルどう動か...
-
非同期通信で掲示板を作る際の...
-
非同期通信を使うタイミングが...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
Pythonを勉強する道のり
-
Pythonを無料(安価)で学ぶ方...
-
RPA(PowerAutomate)の実装について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのgetでJSPを呼び出したい
-
要素内を常に一番下を表示させたい
-
【javascript文法】 prototype...
-
ローカルでのonreadystatechang...
-
jQueryで、複数条件の絞り込み機能
-
JQueryでAjax通信をキャンセル...
-
画面移遷なしで画像アップロー...
-
jqueryでリンクを無効にしたあ...
-
jqueryについて
-
繰り返し処理のシンプルな書き方
-
ある条件の画像のみ表示を切り...
-
jQuery 並列load処理
-
アコーディオンメニューについて
-
jqueryの関数?について
-
jqueryで読み込みが終わった画...
-
jQueryでloadしたページ内でもj...
-
jqueryで特定のIDに対して
-
AJAXでのリロードに関して
-
jqueryでテキストエリア監視に...
-
ドラッグ & ドロップでのド...
おすすめ情報