현재 페이지를 Ajax 콘텐츠로 바꾸기
Ajax 포스트 데이터를 서버로 보내고 응답을 받는 대화창이 있는 페이지가 있습니다.개발하는 동안 두 가지 반응이 있을 수 있습니다. 하나는 정규 반응(질문이 아님)이거나 다른 하나는 오류 반응입니다.서버가 코드 500과 디버그 정보가 많은 페이지를 반환합니다.프레임워크에서 반환된 일반 페이지이며 일부 Javascript 코드가 포함되어 있습니다.만일의 경우에 대비하여 이 오류 페이지를 표시할 수 있기를 원합니다.
문제는 단순히 반환된 결과를 본문 요소에 첨부하거나 새 페이지에서 새 링크를 열고 이 오류를 다시 로드할 수 없다는 것입니다.데이터 대신 HTML 페이지를 받기만 하면 페이지를 표시해야 합니다(현재 창 또는 다른 창).
저는 jQuery를 사용하고 있습니다.
다음과 같이 jQuery ajax 설정을 구성합니다.
$.ajaxSetup({
error: handleXhrError
});
handleXhrError
기능은 다음과 같습니다.
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
참고 항목:
또한 데이터 URL을 지원하는 주요 브라우저의 최신 버전인 데이터 URL을 사용할 수도 있습니다.
function utf8_to_b64( str ) {
return window.btoa(unescape(encodeURIComponent( str )));
}
function loadHtml(html)
{
localtion.href='data:text/html;base64,'+utf8_to_b64(html);
}
이렇게 하면 런타임에 원하는 HTML 페이지를 로드할 수 있습니다.
Ajax 콜백에서:
success: function (data) {
$("html").html($(data).find("html").html());
}
그러면 전체 페이지의 HTML 내용이 AJAX 요청에서 받은 내용으로 바뀝니다.Chrome에서 작동...IE에 대한 확신이 없습니다.
그럼에도 불구하고, 왜 당신이 그것을 포함하려고 하는지 모르겠습니다.<head>
例션...을 쉽게 응답에 있는할 수 .그러나 위의 내용을 쉽게 수정하여 AJAX 응답 본문에 있는 내용만 표시하고, 디바 또는 라이트박스에 추가할 수 있습니다.훨씬 더 친절합니다.
다음은 응답이 url 또는 html 내용인 경우 변경하는 방법의 예입니다(django\php 사용).
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
var replace_t = '{{ params.replace_t }}';
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(replace_t == 'location')
window.location.replace(xmlhttp.responseText);
else if(replace_t == 'content')
{
document.open();
document.write(xmlhttp.responseText);
document.close();
}
}
}
xmlhttp.open("GET",SOME_ASYNC_HANDLER_URL,true);
xmlhttp.send();
저는 이 해결책을 찾았습니다.그것이 정확한지는 모르겠지만, 오페라와 파이어폭스의 경우에는 작동하고 있습니다.
var error_win = window.open(
'',
'Server error',
'status=0,scrollbars=1, location=0'
);
error_win.document.write(XMLHttpRequest.responseText);
단순히 요소를 만들고 반환된 오류 페이지를 요소에 삽입해 보았습니까?오류 페이지와 jQuery로 처리합니다.
var errorContainer = $( '<div/>' );
errorContainer.html( errorTextResponse );
errorContainer.appendTo( $( 'body' ) );
제가 오해하고 있을 수도 있지만, 결과에서 구체적으로 어떤 요소를 표시하고 싶은지 알고 계십니까?다음과 같은 방법을 시도할 수 있습니다.
success: function(data){
//store the response
var $response=$(data);
//use .find() to locate the div or whatever else you need
var errorMessage = $response.find('#warning').text();
alert(errorMessage);
}
그게 당신이 찾던 건가요?
그럴 수 있는 방법이 없을 것 같습니다.프레임이 다른 페이지를 로드하기 위한 것이고 독립 실행형 페이지를 덤프할 다른 샌드박스가 없는 경우, 프레임이 이를 위해 설계되었습니다.
사용 중인 프레임워크에서는 어려울 수 있지만 Ajax 요청에 대해 다른 오류를 생성하는 것이 좋습니다.내 Ajax 페이지는 항상 전송됩니다.
{"exit": 1, "message": "As in the shell, a non-zero exit is an error and this is why..."}
이 일을 쉽게 알아냈어요
document.body.innerHTML = YourAjaxrequest.responseText;
여기서 _________________________________________^은 현재 HTML 페이지를 응답으로 덮어씁니다.
request.onreadystatechange = function() {
if (request.readyState == 1) {
document.getElementById('sus').innerHTML = "SENDING.......";
}
if (request.readyState == 3){
document.getElementById('sus').innerHTML = "SENDING >>>>>>>>>>>>>";
}
if (request.readyState == 4 && request.status == 200) {
//document.getElementById('sus').innerHTML = request.responseText;
document.body.innerHTML = request.responseText;
}
}
request.send(formD);
},false);
언급URL : https://stackoverflow.com/questions/4387688/replace-current-page-with-ajax-content
'programing' 카테고리의 다른 글
컨테이너가 실행되고 있지 않습니다. (0) | 2023.08.09 |
---|---|
마리아DB.15일보다 오래된 테이블에서 행을 삭제하는 트리거 만들기 (0) | 2023.08.09 |
정적 변수는 스레드 안전합니까? C# (0) | 2023.08.09 |
데이터 프레임의 모든 열에서 데이터 출력(판다) (0) | 2023.08.09 |
MariaDB Prepared 문에서 잘못된 형식의 통신 패킷을 반환합니다. (0) | 2023.08.09 |