これは、AJAX を介して非常に大量のデータ ロードを処理している場合にのみ有効です。それ以外の場合は、キャンセルされた場合に結果を表示しないように JS で処理するだけです。
しかし、私が言ったように、膨大な量のデータを処理している場合は、スクリプトを実行する n ステップごとに割り込み条件を追加し、別のスクリプトを使用してその条件を満たすことができます。たとえば、ファイルを使用して割り込みデータや MySQL MEMORY テーブルを保存できます。
例。
1、process.php (データの負荷を処理する ajax スクリプト)
// clean up previous potential interrupt flag
$fileHandler = fopen('interrupt_condition.txt', 'w+');
fwrite($fileHandler, '0');
fclose($fileHandler);
function interrupt_check() {
$interruptfile = file('interrupt_condition.txt');
if (trim($interruptfile[0]) == "1") { // read first line, trim it and parse value - if value == 1 interrupt script
echo json_encode("interrupted" => 1);
die();
}
}
$i = 0;
foreach ($huge_load_of_data as $object) {
$i++;
if ($i % 10 == 0) { // check for interrupt condition every 10th record
interrupt_check();
}
// your processing code
}
interrupt_check(); // check for last time (if something changed while processing the last 10 entries)
2、interrupt_process.php(キャンセルイベントをファイルに伝播するajaxスクリプト)
$fileHandler = fopen('interrupt_condition.txt', 'w+');
fwrite($fileHandler, '1');
fclose($fileHandler);
これは間違いなくスクリプトのパフォーマンスに影響しますが、実行を閉じるためのバックドアになります。これは非常に単純な例です。より多くのユーザーに対して同時に機能させるには、より複雑にする必要があります。
MySQL MEMORY Table、MEMCACHE - Non-persistent Caching Serverなど、見つけられる非永続ストレージを使用することもできます。