#php #javascript #forms
#php #javascript #формы
Вопрос:
Я в странной ситуации. Я только что узнал, что около 50% моих пользователей не имеют включенного javascript. Большая часть моего веб-сайта основана на функции длительного поиска. Как только пользователи нажимают отправить, функция выполняется, и мы отправляем им электронное письмо, когда она завершена — иногда это может занять до 10 минут.
Моя проблема в том, что я не знаю, как сообщить пользователям, что кнопка была успешно нажата, чтобы запустить эту функцию long, если у них отключен javascript. Есть идеи?
Комментарии:
1. Обычный способ — обновить свою страницу новым контентом. Почему вы не можете этого сделать?
2. Потому что следующая страница не загрузится, пока не будет выполнена вся функция php. Есть ли способ обойти это?
3. Ошибка, без Javascript почему бы просто не перенаправить на временную страницу (и перенаправить обратно, если необходимо), которая позволяет им узнать статус, после чего вы можете выполнить функцию?
4. @Bob Cavezza: «Есть ли способ обойти это?» Да. Не делайте всего в PHP-коде, поддерживающем страницу. Эта «фоновая» функция должна фактически выполняться в реальном фоновом режиме.
5. @Bob Cavezza, для отложенных задач можно использовать этот модуль: github.com/jamm/Tasks
Ответ №1:
После отправки запустите php-процесс, который выполняет поиск, и немедленно верните страницу с сообщением о том, что задание было отправлено.
Об этом говорится в ссылке на php с комментарием, в котором говорится, что вы бы вызывали процесс с помощью nohup, чтобы он не прерывался при возвращении вызывающего. php.net функция exec
Комментарии:
1. Это выглядит идеально — просто нужно выяснить, как отправлять данные post
Ответ №2:
В качестве идеи: если вы можете обнаружить, что у некоторых пользователей не включен javascript, может быть, для этих пользователей вы покажете страницу без javascript, html с простой кнопкой ‘type =»submit»‘?
Комментарии:
1. Сейчас я нахожусь в процессе создания сайта без javascript. Я пытаюсь найти способ показать им, что они правильно нажали кнопку отправки. Есть кнопка type =»отправить», следующая страница не загружается до тех пор, пока весь php на этой следующей странице не завершит выполнение
2. что ж… длинный, но более умный способ: создайте задачу, которая будет выполняться отдельно, скриптом из ‘cron’. И откройте страницу, которая будет перезагружаться каждые 5 секунд, и проверьте, выполнена ли задача (проверьте наличие существующего файла с результатами или ключа в memcache с результатами). И напишите на этой странице: «Выполняется …» (или что-нибудь более умное). И когда результат будет получен, вы сможете отобразить данные для пользователя на другой странице. Извините за мой английский.
Ответ №3:
вы можете проверить это на стороне сервера… когда форма отправляется на сервер, просто проверьте, установлено ли значение кнопки отправки.
Комментарии:
1. Да, но как мне передать сообщение в браузере о том, что кнопка отправки была нажата? — Моя проблема заключается в удобстве использования и сообщении пользователям, что их действие было выполнено успешно, поэтому они не нажимают кнопку отправки 4 раза, думают, что ничего не произошло, а затем выходят.