Привет. У меня есть форма, которая посылает данные странице form.php, которая обрабатывает данные и посылает ответ, который вставляется в <div> блок по технолонии аякса. Так вот, если есть какие-то ошибки(пользователь не заполнил поля), то всё нормально, выводится в блоке сообщение об ошибке. А если всё правильно, то я хочу сделать редирект. Но не получается: если вставить '<meta http-equiv='Refresh' content='0; URL=index.php'>' в качестве ответа, то не происходит перенаправления. подскажите пожалуйста, как можно организовать редирект?
Вы же на клиенте обрабатываете полученный ответ ajax-запроса - значит и перенаправляйте соответствующе: Код (Text): location.href = '/path/to/file.php';
Я в ajax чайник, подскажите пожалуйста, вот у меня на странице 1 есть <script type="text/javascript"> /** * Функция для отправки формы средствами Ajax **/ function AjaxFormRequest(result_id,form_id,url) { jQuery.ajax({ url: url, //Адрес подгружаемой страницы type: "POST", //Тип запроса dataType: "html", //Тип данных data: jQuery("#"+form_id).serialize(), success: function(response) { //Если все нормально document.getElementById(result_id).innerHTML = response; }, error: function(response) { //Если ошибка document.getElementById(result_id).innerHTML = "Ошибка при отправке формы"; } }); } </script> Страница 2 обрабатывает данные, которые отправлены со страницы 1, и посылает ответ. При случае, если все удачно(данные обработались и занеслись в БД) то нужно сделать редирект на страницу 3. Я пытался сделать так: на странице 2 писал мета тег с редиректом, но не сработало. Как сделать, чтобы например страница 2 посылала '0', и редирект производился уже средствами Ajax? Спасибо)
Ajax не имеет отношения к редиректам и тому подобному. Если сказать очень просто, то он обеспечивает "фоновое общение" между клиентом и сервером. На сервере, получив какой-либо результат (положительный или отрицательный), вы можете передавать ответом сразу имя или весь путь к файлу, на который нужно сделать редирект, а как его делать, я показал в предыдущем ответе. Код (Text): /* ... */ success: function(response) { //Если все нормально location.href = '/path/to/' + response; // response - имя файла } /* ... */
У меня например на странице 2(которая обрабатывает данные формы) такой код: $search = $_POST['search']; if ($search==''){ пусто, нужно сделать редирект, чтобы пользователь со страницы 1 перенаправился на какую-нибудь страницу 3 } else{ echo 'не пустой запрос' ; }
На сервере: Код (PHP): $result = array('found'=>false, 'redirect'=>''); $search = trim($_POST['search']); if(!empty($search)){ // ищем в БД if(что-то_найдено){ $result['found'] = 'результат SQL-запроса'; } else { $result['redirect'] = 'file3.php'; // перенаправляем на страницу 2, т.к. ничего не найдено } } else { $result['redirect'] = 'file100500.php'; // перенаправляем на страницу 100500, т.к. запрос пустой. } В JS обрабатываем ответ: Код (Text): success: function(response){ if(!response.found) { // если ничего не найдено или запрос пустой, // то перенаправить на соответствующую страницу location.href = response.redirect; } else { // что-то найдено, выводим результат $('#result_id').html(response.found); } }
Спасибо, но у меня страница, на которой находится JS, никак не хочет воспринимать значение found. Поэтому в условии всегда выполняется location.href = response.redirect; Но и он отправляет на страницу undefined. Получается JS не принимает ничего со страницы сервера. Добавлено спустя 32 секунды: Как думаете, в чём может быть ошибка?
C телепатией у меня всегда были проблемы. ) Пробуйте следующее: 1. Изменяете тип данных, в котором ожидается получить ответ от сервера. Вместо dataType: "html" пишем dataType: "json". 2. На сервере отправляете ответ так: Код (PHP): exit( json_encode($result) ); 3. Консолью, я так понимаю, что вы не пользуетесь. Возьмите за правило - до того, как начали какую-нибудь отладку, открываете консоль и закрываете её только после того, как решили на всё забить и идти на пиво.
Один вопрос: если вам надо редиректить страницу - на кой вам сдался Ajax? Сделайте в php-обработчике получение нужного адреса и через header("Location: ...") уходите на него.
Об этом я не подумал, но да, это решение тоже мне подходит, спасибо. Но советы Deonisa тоже помогли. Спасибо Добавлено спустя 8 минут 44 секунды: И ещё один вопрос, хотя не совсем по теме, просто не хочется плодить сотню чайниковских тем. Собственно код <script type="text/javascript" > //удалить картинку $(document).ready(function(){ $('#getContent').click(function(){ $.ajax({ url: "delete_img.php", cache: false, beforeSend: function() { $('#preview').html('Получаем контент'); }, success: function(html){ $("#preview").html(html); } }); return false; }); }); </script> он подгружает контент со страницы delete_img.php при нажатии такой кнопки <a href="#" id="getContent">кнопка </a>. Всё работает нормально, но мне нужно, чтобы на серверную страницу (delete_img.php) подгружался параметр, указывающий, какой номер у кнопки(их присутствует несколько). <a href="#" id="getContent" параметр=1>кнопка 1</a> <a href="#" id="getContent" параметр=2>кнопка 2</a> <a href="#" id="getContent" параметр=3>кнопка 3</a> Как можно такое организовать?
fartuk, за использование одинаковый ID у нескольких элементов в пределах одной страницы, делают explode() задницы по молекулам. Для таких целей существуют классы. Код (Text): var paramVal = $(this).attr('name_of_attribute'); $.ajax({ url: "delete_img.php", cache: false, beforeSend: function() { $('#preview').html('Получаем контент'); }, data: { paramKey: paramVal }, // передаём данные success: function(html){ $("#preview").html(html); } }); На сервере ловим: $_GET['paramKey'] или $_POST['paramKey'], в зависимости от установок
А что в самих кнопках писать? я одинаковый id ставил потому что они одинаковые, просто отличаются параметром, который я не знаю как указать.
А зачем вам ссылки? Код (Text): <button onClick="delete_img(1)">1</button> <button onClick="delete_img(2)">2</button> А в скрипте function delete_img(paramVal) { $.ajax({ url: "delete_img.php", cache: false, beforeSend: function() { $('#preview').html('Получаем контент'); }, data: { paramKey: paramVal }, // передаём данные success: function(html){ $("#preview").html(html); } }); } Добавлено спустя 42 секунды: В таком случае надо ставить одинаковый класс. Одинаковых id не должно быть никогда!
Спасибо, работает. Но получается передать параметр только если он числовой. А можно, например, как-нибудь передавать так: <button onClick="delete_img(1text.text)">1</button> ? Добавлено спустя 4 минуты 31 секунду: Ой, тупанул, надо же было кавычки поставить )