
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFを(htmlのように)無限に縦...
-
バッチファイル 特定ウインドウ...
-
b75h2-m2 biosアップデートした...
-
入力フォームの値をQRコードで...
-
C言語のflagの使い方が分かりま...
-
http://ww12.ktai.pw/というサ...
-
二つのbxsliderをレスポンシブ...
-
php コールバック関数
-
ナイトボットのAliasについて
-
これってなんの電話かわかりま...
-
VBAでクイズゲームの作り方
-
以下のURL入れますか?皆さんは↓
-
画像のドットの部分が抜けてい...
-
Chinapost こよパズルどう動か...
-
非同期通信で掲示板を作る際の...
-
非同期通信を使うタイミングが...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
Pythonを勉強する道のり
-
Pythonを無料(安価)で学ぶ方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jQueryで、複数条件の絞り込み機能
-
要素内を常に一番下を表示させたい
-
jqueryでリンクを無効にしたあ...
-
jqueryを使って非同期通信で10...
-
jquery ボタンでoff on
-
jQuery 並列load処理
-
コールバック中の変数操作
-
AJAXでのリロードに関して
-
多数のCPUを使い同期処理をした...
-
jqueryでテキストエリア監視に...
-
ローカルでのonreadystatechang...
-
Win11 へのRufus と レジストリ...
-
階層別の組織図の自動作成について
-
JavaScriptでtabindexの変更っ...
-
Javascriptを使ってQRコード読...
-
同一ページ移動時ハンバーガー...
-
JavascriptからPHPへのAjax通信...
-
how's whether today in yufuin?
-
パソコンで動くjavascriptがス...
-
カンマ区切りのデータを配列に...
おすすめ情報