jQuery.post (), PHP и перенаправления

ЭТА ПРОБЛЕМА СЕЙЧАС РЕШАЕТ. СПАСИБО ВАМ, КОТОРЫЕ ВОЗВРАЩАЛИСЬ.

Здравствуйте,

Я пытаюсь решить проблему, с которой я, возможно, подошел с неправильного направления, так что, возможно, кто-то может предложить лучшее решение.

Я пишу небольшое веб-приложение для работы, которое имеет функцию поиска. Когда пользователь отправляет строку поиска, форма отправляется в контроллер 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(); 

Однако было два оговорки.

  1. appendTo($("body")) необходимо было сделать, чтобы он правильно appendTo($("body")) в Firefox.

  2. 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 { // // // } }); 

Это было решено. Решение находится в моем первоначальном посте.