Дело такое, пишу простой поиск, но столкнулся с проблемой автообновления страницы при каждом нажатии на кнопку формы. Мне нужно чтобы при клике на кнопку "НАЙТИ" было совершено перенаправление на страницу где должна выводиться найденная инфа. Для этого в jq я использую эту сроку: !!! Код (Javascript): window.location.href = '/search?'+ search; Но данные пропадают каждый раз как я нажимаю на кнопку. Потому что срабатывает вот это пере направление. Не знаю что делать. Как мне этого избежать? Что нужно сделать? Может быть написать проверку чтобы строка срабатывала только на главной странице?, но у меня такое не вышло или я просто не знаю как её написать в данном случае! В принципе скрипт рабочий. Данные с формы отправлятюся и в итоге я поучаю ответ, но появляется на миг и сразу же исчезает из-за функции перенаправления. Форма: HTML: <form action="" method="get" name="search" id="search_form"> <input type="text" name="s" id="search"/> <input type="submit" value="Поиск"> </form> Скрипт: Код (Javascript): $('#search_form').on('submit',function () { var search = $(this).serialize(); window.location.href = '/search?'+ search; $.ajax({ url:"/search/dd", method:"GET", data:search, success:function (data) { $('#test2').html(data); }, error: function () { console.log('Error'); } }); }) Я понимаю, что оно мешает (window.location.href = '/search?'+ search;), но как мне сделать редирект? Ведь форма поиска находиться в шапке дефолтного шаблона, а весь основной контент погружается в отдельных вьюшках в соответствии с маршрутом из строки браузера. Я уже не знаю что делать. Помогите =)
Может не совсем понял что ты спрашиваешь. Но думаю тебе стоит попробовать поменять Код (Text): <input type="submit" value="Поиск"> на Код (Text): <input type="button" value="Поиск"> При этом ловить не сабмит , а клик на кнопку: Код (Text): $('#search_form').on('click',function () {
У меня есть форма поиска в шапке сайта. Задумка такая, что когда я ввожу данные и наживаю на кнопку ПОИСК, то перехожу с главной страницы "/", на страницу где должны уже быть результаты поиска т.е. "/search". У меня получается так что прокис работает только на самой странице search, а если на главной ввожу данные в форму и жму кнопку ПОИСК, то перенаправления не происходит =( Ладно. Пёс с ней. Сделаю отдельную страницу поиска. Может быть когда по лучше разберусь с этим всем - переделаю.
@GTank, все от неутолимого желания прикручивать аякс и т.п. ко всему подряд. В поиске аякс может потребоваться только для «живого поиска». Для всего остального даже JS не нужен. Порядок такой: 1) из формы POST-запрос на /search; 2) редирект методом GET на /search/поисковый_код; 3) в ответ на послед. запрос вывод первой страницы результатов поиска (или, возможно, предупреждение, если пользователь вручную вписал в адрес некорректный поисковый код).
Всё не так. Я хотел как лучше. Да и вообще мне нужно практиковаться. Вот и решил реализовать это именно так. Не понял насчёт второго пункта. Я просто представить это не могу, как сделать редирект методом ГЕТ. Можете дать похожий пример или подскажите что гуглить =)
зачем используешь аякс, если достаточно отправиться по <form action="url"> на другую страницу с результатом как ты и хотел ?
Вариантов в сети много. В основном все асинхронные. Пытался реализовать свой поиск на основе того что нашел в сети. В итоге я реализовал так: Форма из шапки стандартного шаблона: HTML: <form action="/search" method="post" name="search" id="search_form"> <input type="text" name="s" id="search_input"/> <input type="submit" name="bsearch" value="Поиск"> </form> Контроллер: PHP: class SearchController extends AppController { public function indexAction() { if (isset($_POST['bsearch'])){ $search_model = new Search(); $search_data = $_POST['s']; $result = $search_model->search($search_data); } $this->set(compact('data', 'result')); } } Модель: PHP: class Search extends Model { public function search($word){ $word = htmlspecialchars($word); if($word === ''){ return false; }; $query = ''; $array_words = explode(' ',$word); foreach ($array_words as $key => $value){ if (isset($array_words[$key-1])){ $query .= ' OR '; } $query .= 'title LIKE "%'. $value .'%"'; } $query_reruslt = $this->selectData($query); return $this->sortData($query_reruslt); } public function selectData($query){ return $this->db->query("SELECT * FROM products WHERE {$query}"); } public function sortData($query_reruslt){ $data = []; foreach ($query_reruslt as $item){ $data[$item['id']] = $item; } return $data; } } Во вьюшке так чисто для теста: PHP: <?php foreach ($debug as $item):?> <?php echo $item['title']?> <?php endforeach; ?> В целом всё работает как я и хотел. Запрос разбивается на части и находятся все имеющиеся записи по словам из формы =) Вопрос решен! Всем спасибо =)
Обычный заголовок Location (со статусом 302). Браузеры в ответ на него будут делать запрос методом GET.
Понятно. Почитаю, но уже переделывать не буду. Как сделал, так сделал. На данный момент меня устраивает.
@GTank, однако, в первом варианте забыли о том, что браузер выполняет некоторые действия по-умолчанию.