Привет всем, есть форма на сайте с поиском клиентов, когда задаешь даты поиска и нажимаешь найти, находит список клиентов, метод post все как обычно, но при возврате на страницу поиска выходит ошибка ERR_CACHE_MISS, много читал в инете кто то советует перейти на get кто то прописывать в сессии, на get нельзя перейти в моем случае, а в сессии бы и рад записать но браузер раньше выводит ошибку и не доходит до обработки php, подскажите пожалуйста кто знает, как отловить ошибку и чтоб нормально отработал поиск, не зависимо от перехода по страницам.
Err_cache_miss. Страница просит повторно отправить ранее введенные данные скорее всего возвращаясь на страницу назад - вы опять тут же отправляете форму с поисковым запросом и так до бесконечности... Ванг тут нету... показывайте код поиска
Да все так, вот код Код (Text): <div class="search-form"> <form id="search_funding" action="<?php echo get_url( 'funding' . DS . 'search' ); ?>" method="post"> <fieldset> <p class="date_type left"> <label for="funding[date_type]">Search by:</label> <select name="funding[date_type]"> <option value="funding_date"> Funding Date </option> <option value="repayment_date"> Payment Date </option> </select> </p> <p class="date left"> <label for="funding[date]">Date:</label> <input id="funding_date" class="datepicker" onclick="displayDatePicker('funding[date]');" name="funding[date]" type="text" value="" /> </p> </fieldset> <fieldset> <p class="or"> Or </p> </fieldset> Но дело скорее всего в обработке браузера потому что выходит вот такое окно:
Движок не мой, потому не все знаю, но есть вот такой обработчик в backend Код (Text): $('#search_funding').validate( { rules: { 'funding[funding_date]': { required: function( element ) { return ( $("#funding_date_from").val() == '' && $("#funding_date_to").val() == '' ); } }, 'funding[date_from]': { required: function( element ) { return ( $("#funding_date").val() == '' && $("#funding_date_to").val() != '' ); } }, 'funding[date_to]': { required: function( element ) { return ( $("#funding_date").val() == '' && $("#funding_date_from").val() != '' ); } } }, errorPlacement: function() { }, submitHandler: function( form ) { form.submit(); } });
ну для начала это не совсем бэкенд, это вообще JS ... судя по всему идет проверка и если норм все то идет та самая отправка form.submit(); похоже что используется какая-то библиотека.. validate когда у нее срабатывает submitHandler ? похоже что прямо при показе формы- проверяет - заполнены ли какие-то поля - если да - то отправляет.... наверное после отправки формы - принимающий бэкенд php потом отпять отправляет на эту же старницу - а поля остаются заполненными ... вот и идет цикл бесконечный... найдите для начала где в php идет обработка формы - и посмотрите чем заканчивается - уберите временно редирект опять на форму
Есть обработчик поиска, но в нем все стандартно, из массива $_POST вытаскиваются даты введенные на форме и затем делается render страницы поиска, там куча проверок но все они не про ошибку... убрал рендер страницы, выходит просто пустая страница. Ошибка так же осталась, эта ошибка выходит всегда и у всех, дело не в коде а в поведении браузера или веб сервера, просто кто то на это не обращает внимания а кто то пытается обработать ошибку. Ошибка происходит именно когда ты что то поискал, потом перешел на другую страницу потом в браузере нажал стрелку и вернулся на страницу результата поиска, вот тут бац и ошибка ) Код (Text): $data = (object)$_POST['funding']; $date_type = $data->date_type; $sort_url .= DS . $date_type; ...... if (!empty($data->attorney)) { $q_attorney = Attorney::findById($data->attorney); $this->setLayout('backend'); $this->display('funding' . DS . 'search', array('attorneys' => $attorneys, 'date_type' => $date_type, 'date' => $date, 'funding' => $funding, 'q_attorney' => $q_attorney, 'sort_url' => $sort_url, 'status' => $status)); } else { $this->setLayout('backend'); $this->display('funding' . DS . 'search', array('attorneys' => $attorneys, 'date_type' => $date_type, 'date' => $date, 'funding' => $funding, 'sort_url' => $sort_url, 'status' => $status)); }
Я вам выше написал в чем дело... Поместите весь этот скрипт на событие отправки формы $((form). submit(function (e) { Тут весь скрипт с validate })
я извиняюсь, но я ничего не понял...скрипт js поместить в $((form) ? Не работает, скрипты вообще перестают работать...
Ооооо! ) нашел решение! перед стартом сессии, надо задать параметры сессии чуть другие: session_cache_limiter('private, must-revalidate'); session_cache_expire(60); все отлично работает, только нельзя так делать на страницах оплаты, а то снимать с карты будет каждый раз ) Спасибо за участие Adsoft!
ну я макет же показал... я не знаю вашу разметку там....укажите ид формы которую отправляете $('#search_funding') если у вас <form id="search_funding"... ой ли... костыль костыльный - в инспекторе включите непрерывные логи - и посмотрите сколько раз страница перезагружается
Не буду спорить возможно костыль, но я так понял что это вопрос сессий, браузер запрашивает при нажатии кнопки возврата из кэша страницу которой уже нету в кэше, и ошибка выходит на уровне браузера, если разрешить сессии кэш не затирать какое то время то все работает.
кстати посмотрел по логам, страница search один раз загружается(та что выше это я заходил первый раз, потом возврат делал):