codeigniter очистить вид вывода - PullRequest
1 голос
/ 23 января 2012

Можно ли каким-либо способом «очистить» то, что в данный момент находится в представлении, вместо необходимости использовать перенаправление?

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

$this->load->view('blah');

он сохранит исходный контент (в данном случае форму) и просто добавит представление поверх этого. Я бы предпочел не использовать перенаправление, так как я хотел бы сохранить URL-адрес одинаковым. Любой способ очистить то, что в настоящее время в представлении без перенаправления или JavaScript?

    <script type="text/javascript">

function updateajaxem(){


$(document).on("click", "a.ajaxem", function(e){ 
e.preventDefault();

var action=$(this).attr('href');
//alert(action);
if(action.indexOf('register')>0){

$("div#logininfo").load("http://localhost/testrun/auth/register/").fadeIn();

}
else if(action.indexOf('password')>0)
{
$("div#logininfo").load("http://localhost/testrun/auth/forgot_password/").fadeIn();

}

}); //end 

}
</script>
<script type="text/javascript">

  updateajaxem();

//$("a.ajaxem").live("click", function(e){ 


$(document).on("click","input:submit",function(e){
e.preventDefault();

var formaction=$(this).closest('form').attr('action');
var dataString=$(this).closest('form').serialize();
alert(dataString);
//$("div#logininfo").load(formaction,data);

   $.ajax({
        type: "POST",
        url: formaction,
        data: dataString,
     //   dataType: "json",
        success: function(data) {
alert(data);

        $("div#logininfo").html(data);
        updateajaxem();


       }// end of success

        });        





});





</script>

Для моего codeigniter, в основном это заканчивается redirect('whereever'); or $this->load->view("blah");

codeigniter - это в основном стандартный код авторизации, только ссылки и формы "ajax-ed". Таким образом, codeigniter, который работает с javascript, просто загружает представление или перенаправляет на другую функцию в контроллере, который загружает представление. ничего особенного. Только то, что только перенаправление будет показывать только что добавленное представление, в то время как простое представление загрузки без перенаправления будет также показывать старое содержимое. Исходя из предположения, высказанного в комментариях, похоже, что после выполнения ajax мне придется обрабатывать его через javascript.

но только перенаправление «очистит» текущее содержимое просмотра и покажет только то, что я хочу, обычно это сообщение об обновлении или простой HTML. Однако перенаправление требует другого изменения URL.

Кроме того, после нескольких щелчков мои события класса "ajaxem" больше не запускаются? Вот почему я сделал функцию updateajaxem () и вызываю ее после каждой перезагрузки ajax, однако это не работает. Я читал, будут ли делегаты работать только для текущих и будущих элементов?

Ответы [ 3 ]

2 голосов
/ 23 января 2012

Любой способ очистить то, что в настоящее время в представлении, без перенаправления или javascript?

Технически невозможно «очистить» то, что уже было отправлено в браузер.Если в вашем примере даже что-то уже отображается в браузере, то, как правило, уже слишком поздно «очищать» окно браузера со стороны сервера.

Именно поэтому перенаправление работает, оно заставит браузер отойтисо страницы и получите новый вывод.

Вы можете закодировать команду для удаления фрагментов из DOM и замены других, например, с помощью AJAX, но это будет JavaScript (а не то, что вы просите).

Пока вы не отправили вывод в браузер, вы можете очистить его, используя функции управления выводом в PHP Документы .Как создание буфера вывода и манипулирование им перед отправкой вывода в браузер

0 голосов
/ 23 января 2012

Вы используете ajax, в respose echo все, что вы хотите, чтобы придерживаться представления.
В PHP:

if(isset($_GET['ajax'])){
$data = "<table>
<tr>
<td>Data To substitute</td>
</tr>
</table>";
}

В JS:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(data){
    $("#WrapperDivWhereYouWantToAddNewView").html(data);
  }
});

Я думаю, это подойдет.

0 голосов
/ 23 января 2012

вы можете использовать $ ('body'). Load ('url'); с JQuery, но это все, что я могу предложить. Это выполнит запрос ajax и заменит ваше тело новым контентом. Вы также можете реализовать более надежное решение с помощью gif-файлов ajax-загрузчика и т. П.

...