programing

현재 페이지를 Ajax 콘텐츠로 바꾸기

randomtip 2023. 8. 9. 23:27
반응형

현재 페이지를 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

반응형