Как перестать загружать в него процесс iframe и php - PullRequest
1 голос
/ 18 апреля 2011

Я получил скрипт, который проверяет почту в моей собственной веб-почте. И я хочу добавить кнопку отмены. Таким образом, если пользователь видит, что проверка всей почты займет слишком много времени (у него есть 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?

1 Ответ

0 голосов
/ 18 апреля 2011

Единственный способ остановить запуск сценария PHP, за исключением ручного вмешательства на стороне сервера, - убить сценарий из консоли.Тем не менее, вы можете написать функциональность самостоятельно, если у вас есть доступ к исходному тексту скрипта PHP.


Редактировать:

То, что вам, очевидно, придется сделать, это написать свой скрипт длязагружайте несколько писем за раз, скажем, пять или десять.Один сценарий, вызванный из iFrame, загрузит эти письма, а затем, когда это будет сделано, вернет HTML и AJAX, которые:

  1. проверяют родительский фрейм на наличие скрытого поля, и если это скрытое поле установлено в 1,
  2. перезагружается для обработки следующих 5-10 писем.

Затем вы бы изменили кнопку Отмена, чтобы она установила скрытое поле на 0, и сценарий завершился вместопродолжая в следующем цикле.

Вы можете установить количество обрабатываемых писем за один раз меньшим, скажем, 2 или 1, и это сделает кнопку отмены более отзывчивой в обмен на использование большего количества HTTP-запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...