Ajax запрос ждет ответа от php

340
27 марта 2017, 10:12

Использую аякс запрос, и хочу чтобы отправить запрос, и не ждать пока обработается пхп скрипт.

Но получается так, что я отправляю аякс запрос, и не могу перейти на любую другую страницу сайта, пока не обработается php скрипт.

$.ajax({
  url: url,
  data: data
});
// php пока не посчитает не отдаст результат
<?php
$a = 0;
while($a < 100000000){
    $a++;
}
return;

Как быть в такой ситуации, и что делать для решения вопроса?

Answer 1

Чтобы долго выполняющийся PHP скрипт (отправка почты) не "подвешивал" клиента, можно реализовать такую "асинхронную" технику: ваш PHP-скрипт send_mail_async.php инициирует запуск другого PHP-скрипта send_mail.php (который непосредственно занимается отправкой) и, не дожидаясь его окончания, возвращает результат.

  $url = 'send_mail.php?blah-blah=123&...';
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_TIMEOUT_MS, 50);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);
  echo "In a few minutes you will get an email. Check Spam folder ;)";
  exit;

Пишу "асинхронную" в кавычках, т.к. для реальной асинхронности не хватает обработки результатов скрипта по окончании выполнения. Но для маленьго ненагруженного проекта сгодится.

UPDATE

Если нужна проверка результатов отправки, можно формировать уникальный идентификатор сеанса отправки и периодически с клиента посылать запрос с проверкой результата отправки, используя этот идентификатор. Соответственно, скрипт отправки должен сохранять результат в табличку: in progress, fail, success...

Answer 2

Решил вопрос, бок был у меня, вот в чем:

При аякс запросе, пыталась стартовать сессия поверх существующей, и оно вот так вот интересно отражало.

Решил следующим кодом

if( $_SESSION === NULL )
    session_start();

И все окей. Всем спасибо

READ ALSO
Экспорт данных в документ для печати

Экспорт данных в документ для печати

Имеется стандартная форма ФИО, Должность, Организация, АдресПо нажатию кнопки из этой формы попадают в таблицу

321
вставка переменной как часть mysql запроса в php

вставка переменной как часть mysql запроса в php

ЗдравствуйтеПодскажите пожалуйста как можно реализовать следующую задачу: $query = "INSERT INTO таблица VALUES (раз, два, три) VALUES ('текст', {$words})"; когда...

340
The table associated with app\models\Post must have primary key(s)

The table associated with app\models\Post must have primary key(s)

В /gii/crud когда добавляю crud пишет 'The table associated with app\models\Post must have primary key(s)' что мне сделат ?

390