2012-01-23 2 views
1

리디렉션을 사용하지 않고 현재보기에있는 내용을 "지우려면"가능한 방법이 있습니까?codeigniter clear view 출력

내 사이트에서 ajax를 구현 중이며 표시된보기 만 포함 된 아약스 요청에 대한 응답을 반환하려는 경우 리디렉션을 사용해야한다는 사실을 알고 있습니다. 난 그냥 (이 경우 양식을) 원본 콘텐츠를 유지하고 단지 그 위에보기를 추가합니다

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

를 사용하는 경우, 현명한 기타. URL을 동일하게 유지하려면 리디렉션을 사용하지 않는 것이 좋습니다. 리디렉션 또는 자바 스크립트없이 현재보기에서 현재 무엇을 지울 수 있습니까? 내 CodeIgniter를 들어

<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를 그냥 링크 및 양식은 "아약스-ED"이며, 기본적으로 표준 인증 탱크 코드 인 redirect('whereever'); or $this->load->view("blah");

되는 끝납니다. 따라서 javascript와 함께 작동하는 codeigniter는 뷰를로드하는 컨트롤러의 다른 함수로 리디렉션하거나 뷰를로드하는 것입니다. 특별한 것은 없다. 단지 리다이렉션 만 새로 추가 된 뷰를 보여주고 리다이렉트가없는 간단한로드 뷰는 이전 콘텐츠를 보여줍니다. 의견에 의한 제안을 바탕으로 아약스가 수행 된 후에 아픈 것 같아서 자바 스크립트를 통해 처리해야합니다.

리디렉션 만 현재보기 내용을 "지우고"원하는 내용 만 표시합니다. 일반적으로 업데이트 메시지 또는 간단한 html입니다. 그러나 리디렉션에는 다른 URL 변경이 필요합니다.

또한 몇 번의 클릭 후 내 "ajaxem"클래스 이벤트가 더 이상 트리거되지 않습니다. 그래서 내가 updateajaxem() 함수를 만들고 각 Ajax를 다시로드 한 후에 호출하지만 이것이 작동하지 않습니다. 내가 읽었으며, 대표자는 현재에만 작동하고 미래는 요소입니까?

+1

예제 코드를 보여 주실 수 있습니까? 문제가 있다고 생각하지 않을 수도 있지만 ***이 ***을 처리하는 많은 방법이 있으므로 구체적인 예를 들어 설명하는 것이 좋습니다. –

+0

수정 사항을 보았습니다. 죄송합니다. 컨트롤러 코드를 보여주십시오. 왜냐하면이 모든 비즈니스가 처리되기 때문입니다. '$ this-> input-> is_ajax_request()'에 대해 알고 있습니까? –

+0

네,하지만 자바 스크립트를 사용하지 않고 이전 내용을 제거하려면 알고있는 한 리디렉션이 필요합니다. 리디렉션을 사용하지 않고도 에코와 뷰 모두를 반환하는 것은 작동하지 않습니다. –

답변

2

현재 리디렉션 또는 자바 스크립트없이보기에 현재 무엇을 삭제할 수 있습니까?

기술적으로 브라우저에 이미 전송 된 내용을 "지울 수 없습니다". 예를 들어 브라우저에 이미 뭔가가 표시되어 있다면 일반적으로 브라우저 창을 서버 측에서 "지우려면"너무 늦습니다.

이것이 리디렉션이 작동하는 이유이므로 브라우저가 페이지 밖으로 이동하여 새로운 출력을 얻도록 명령합니다.

DOM에서 단편을 제거하고 다른 것을 대체하는 명령을 인코딩 할 수 있으므로 AJAX는 자바 스크립트 일뿐 아니라 사용자가 요구하는 것이 아닙니다.

출력을 브라우저에 보내지 않은 경우 output control functions in PHP­Docs을 사용하여 출력을 지울 수 있습니다. 출력 버퍼를 생성하고 브라우저에 출력을 보내기 전에 조작하십시오.

0

$ ('body')를 사용할 수 있습니다. load ('url'); jQuery와 함께,하지만 그건 내가 제안해야 할 전부입니다. 이렇게하면 아약스 요청을 수행하고 몸을 새 콘텐츠로 바꿉니다. 또한 ajax 로더 gif 등을 사용하여보다 강력한 솔루션을 구현할 수 있습니다.

+1

OP는 "리디렉션 또는 자바 스크립트없이"라고 말했습니다 ... –

+0

하하, durr ... 속도 위반에 대해 나쁘다. 나는 그것이 태그가 붙은 자바 스크립트 이후로 생각하지 않았기 때문에 나는 생각했다. –

0

아약스를 사용하면 뷰를 고정하고 싶은대로 에코를 재현합니다.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); 
    } 
}); 

내가 추측이 할 것입니다.