2012-01-23 3 views
1

Есть ли способ «очистить» то, что в настоящее время отображается, вместо того, чтобы использовать перенаправление?codeigniter clear view output

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

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

он будет держать исходное содержание (в данном случае формы) и просто добавить вид сверху этого. Я бы предпочел не использовать перенаправление, поскольку я хотел бы сохранить URL-адрес таким же. Любой способ очистить whats в настоящее время в представлении без переадресации или 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 в основном стандартный код аутентификации танка, только ссылка и форма «Аякс-й изд.» Таким образом, codeigniter, который работает с javascript, либо просто загружает представление, либо перенаправляет на другую функцию в контроллере, который загружает представление. ничего особенного. Просто, что только перенаправление покажет только недавно добавленное представление, в то время как простой просмотр нагрузки без перенаправления также покажет старый контент. Основываясь на предположении комментариев, похоже, что им приходится обращаться с ним через javascript после выполнения ajax.

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

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

+1

Не могли бы вы показать свой пример кода? Возможно, вы не думаете, что это важно, но есть *** так *** много способов справиться с этим, что было бы лучше показать вам, как в вашем конкретном примере. –

+0

Видел свое редактирование. Извините, я имел в виду, пожалуйста, покажите код контроллера, потому что именно здесь обрабатывается весь этот бизнес. Вы знаете о '$ this-> input-> is_ajax_request()'? –

+0

да, но для устранения предыдущего содержимого без использования javascript потребуется переадресация. без использования перенаправления, как эхо, так и возврат только вида не будут работать. –

ответ

2

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

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

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

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

До тех пор, пока вы не отправляете вывод в браузер, вы можете очистить его, используя output control functions in PHP­Docs. Подобно созданию выходного буфера и манипулированию им перед отправкой вывода в браузер

0

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

+1

OP сказал «без перенаправления или javascript» ... –

+0

Ха-ха, durr ... мой плохой для ускорения. Я понял, так как я не думал, так как он был помечен javascript. –

0

Вы используете ajax, в ответном эхом все, что вы хотите придерживать.
В 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); 
    } 
}); 

Я думаю, это будет делать.