ЭТА ПРОБЛЕМА СЕЙЧАС РЕШАЕТ. СПАСИБО ВАМ, КОТОРЫЕ ВОЗВРАЩАЛИСЬ.
Здравствуйте,
Я пытаюсь решить проблему, с которой я, возможно, подошел с неправильного направления, так что, возможно, кто-то может предложить лучшее решение.
Я пишу небольшое веб-приложение для работы, которое имеет функцию поиска. Когда пользователь отправляет строку поиска, форма отправляется в контроллер CodeIgniter. Если поиск возвращает результат, CodeIgniter загружает страницу с результатами. Если результатов нет, текущая страница пользователя просто перезагружается, без каких-либо указаний на то, что поиск не дал никаких результатов. Таким образом, это совсем не удобно, и я решил переделать это с некоторой помощью из $.ajax()
.
Это было довольно легко, но теперь я застреваю, пытаясь понять, что делать с данными, которые я получаю, если поиск будет успешным. Я знаю, что $.load()
может заменить часть страницы, но мне нужно перенаправить пользователя на совершенно другую страницу, а POSTing данные, которые только что вернули мой запрос ajax. Данные, возвращаемые с PHP, находятся в формате json_encode()
.
ПРИМЕЧАНИЕ. $.jGrowl()
– это плагин jQuery, который отображает сообщение типа Growl.
$("#alias_s").submit(function() { event.preventDefault(); var term = $('input#alias_search').val(); $.post("<?=base_url()?>aliases/searchAliases", { searchTerm: term }, function(data) { if(!data) { $.jGrowl("Search for '" + term + "' returned no results", { life: 5000 });; } else { // // How do i post this data to another page and redirect a user there? // } });
ОБНОВЛЕНИЕ: Мне удалось найти решение этой проблемы.
Я беру данные, которые были возвращены из $.post()
и используйте $.load()
чтобы $.load()
POST обратно на тот же контроллер, который, в свою очередь, принимает данные и загружает правильные файлы вида. Единственным недостатком является то, что URL-адрес все тот же, что ломает пару мелочей, но я могу справиться с этим …
$('#content').load("<?=base_url()?>aliases", { searchData: data});
ОБНОВЛЕНИЕ # 2: Я, наконец, сделал это так, как хотел. Что я сделал, это взять данные, которые были возвращены из PHP в формате JSON, отправить его обратно на тот же контроллер и позволить CodeIgniter позаботиться о загрузке просмотров, таким образом, все мои зависимые от URL-адреса тоже работают.
$('<form action="CONTROLLER" method="post"><input type="hidden" id="searchData" name="searchData" value='+data+'></form>').appendTo($("body")).submit();
Однако было два оговорки.
appendTo($("body"))
необходимо было сделать, чтобы он правильно appendTo($("body"))
в Firefox.
POST отключил мою строку JSON после первого пробела, поэтому мне пришлось использовать str_replace()
в php, чтобы исправить это.
echo str_replace ('', '% 20', json_encode ($ search_results));
ЭТА ПРОБЛЕМА СЕЙЧАС РЕШАЕТ. СПАСИБО ВАМ, КОТОРЫЕ ВОЗВРАЩАЛИСЬ.
Я пишу небольшое веб-приложение для работы, которое имеет функцию поиска. Когда пользователь отправляет строку поиска, форма отправляется в контроллер CodeIgniter. Если поиск возвращает результат, CodeIgniter загружает страницу с результатами. Если результатов нет, текущая страница пользователя просто перезагружается, без каких-либо указаний на то, что поиск не дал никаких результатов.
Я думаю, вы должны просто исправить это плохое поведение, и действие «Поиск» вернет страницу с некоторой информацией об ошибке. Использование AJAX на самом деле не очень хорошо, если вы хотите полностью перезагрузить страницу в любом случае.
Если вы хотите перенаправить пользователя на другую страницу, почему вы прекратите выполнение формы в javascript?
Возможно, эта работа, но я не тестировался.
$("#alias_s").submit(function() { var term = $('input#alias_search').val(); $.post("<?=base_url()?>aliases/searchAliases", { searchTerm: term }, function(data) { if(!data) { $.jGrowl("Search for '" + term + "' returned no results", { life: 5000 });; return false; } else { // // // } });
Это было решено. Решение находится в моем первоначальном посте.