jQuery.post (), PHP и перенаправления - PullRequest
0 голосов
/ 01 июля 2010

ЭТА ПРОБЛЕМА СЕЙЧАС РЕШЕНА. СПАСИБО ВСЕМ, КТО ОТВЕТИЛ.

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

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

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

  1. appendTo($("body")) было необходимо для правильной отправки формы в Firefox.

  2. POST обрезал мою строку JSON после первого пробела, поэтому мне пришлось использовать str_replace() в php, исправьте это.

    echo str_replace ('', '% 20', json_encode ($ search_results));

ЭТА ПРОБЛЕМА СЕЙЧАС РЕШЕНА. СПАСИБО ВСЕМ, КТО ОТВЕТИЛ.

Ответы [ 4 ]

1 голос
/ 01 июля 2010

Я пишу небольшое веб-приложение для работы, в котором есть функция поиска.Когда пользователь отправляет строку поиска, форма отправляется на контроллер CodeIgniter.Если поиск возвращает результат, CodeIgniter загружает страницу с результатами.Если результатов нет, текущая страница пользователя просто перезагружается без указания того, что поиск не дал результатов.

Я думаю, вы должны просто исправить это плохое поведение, и действие "Поиск" вернет страницу с некоторой информацией об ошибке.Использование AJAX не очень помогает, если вы все равно хотите полностью перезагрузить страницу.

0 голосов
/ 13 июля 2010

Это было решено.Решение в моем оригинальном посте.

0 голосов
/ 02 июля 2010

Может быть, это работает, но я не проверял.

$("#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 {
               //
               //  
               //
             }
});
0 голосов
/ 01 июля 2010

Если вы хотите перенаправить пользователя на другую страницу, почему вы останавливаете выполнение формы в javascript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...