如何停止加载iframe和php进程在它


How to stop loading iframe and php process in it

我得到了一个脚本,它检查我自己的Webmail中的邮件。我想添加取消按钮。因此,如果用户看到检查所有邮件需要太长时间(他有100封新邮件),他可以取消处理(例如,第31封邮件)。

我在iframe中运行这个脚本:

public function checkEmailAction() {
    set_time_limit(0);
    while (@ob_end_flush()) {
    }
    ob_implicit_flush(1);
    $strError = '';
    echo "";
    $accountId = Zend_Json::decode($this->_getParam('account_id'));
    if (!$this->mail_account->hasAccessToAccount($accountId)) {
        $strError = 'Insufficient access rights';
    }
    if (empty($strError)) {
        try {
            $this->mail->sync($accountId);
        } catch (MailException $e) {
            Mail_LoaderDispatcher::change('Error. ', 100, null, true);
            if($e->getMessage() != "Can't connect to email account.") {
            Zend_Registry::get('log')->debugErrorToFile('Mail Error: ' . $e, '', 'mail');
        }
        }
    } else {
        Mail_LoaderDispatcher::change($strError, 100, null, true);
    }
    echo "";
    exit();
}

在取消按钮点击事件,我添加了这样的代码,它破坏iframe, ,但不停止php进程:

<>以前var ifr = $ (' # mail_iframe_check_email ');ifr.remove(); 之前

但是php脚本继续工作并且所有的邮件都被下载了:(

也许,有一些方式上取消按钮点击发送一些参数(通过Cookie或Get) iframe和停止php脚本运行?

停止PHP脚本运行的唯一方法(不需要在服务器端进行手动干预)是从控制台终止脚本。但是,如果您可以访问PHP脚本的源代码,则可以自己编写该功能。


编辑:

你显然要做的是编写脚本一次下载几封邮件,比如五封或十封。有一个脚本调用从iFrame下载这些邮件,然后当它完成返回一些HTML和AJAX:

  1. 检查父帧是否有隐藏字段,如果隐藏字段被设置为1,
  2. 重新加载自身以处理接下来的5-10封邮件。

然后更改Cancel按钮,使其将隐藏字段设置为0,脚本终止而不是继续下一个循环。

您可以将一次处理的邮件数量设置为较低的数字,例如2或1,这将使取消按钮响应更快,以换取使用更多的HTTP请求。