ЭТА ПРОБЛЕМА СЕЙЧАС РЕШЕНА. СПАСИБО ВСЕМ, КТО ОТВЕТИЛ.
Здравствуйте,
Я пытаюсь решить проблему, к которой я мог обратиться с неправильной стороны, поэтому, возможно, кто-то мог бы предложить лучшее решение.
Я пишу небольшое веб-приложение для работы, в котором есть функция поиска. Когда пользователь отправляет строку поиска, форма отправляется на контроллер CodeIgniter. Если поиск возвращает результат, CodeIgniter загружает страницу с результатами. Если результатов нет, текущая страница пользователя просто перезагружается без указания того, что поиск не дал результатов. Итак, это совсем не удобно для пользователя, и я решил сделать это с некоторой помощью $.ajax()
.
Это было довольно легко, но теперь я застрял, пытаясь понять, что делать с данными, которые я получаю обратно, если поиск успешен.
Я знаю, что $.load()
может заменить часть страницы, но мне нужно перенаправить пользователя на совершенно другую страницу, одновременно размещая данные
мой поиск 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()
, чтобы отправить их обратно на тот же контроллер, который, в свою очередь, принимает данные и загружает правильные файлы просмотра. Единственным недостатком является то, что 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();
Было 2 предупреждения.
appendTo($("body"))
было необходимо для правильной отправки формы в Firefox.
POST обрезал мою строку JSON после первого пробела, поэтому мне пришлось использовать str_replace()
в php, исправьте это.
echo str_replace ('', '% 20', json_encode ($ search_results));
ЭТА ПРОБЛЕМА СЕЙЧАС РЕШЕНА. СПАСИБО ВСЕМ, КТО ОТВЕТИЛ.