버튼을 누르면 웹 페이지 (<html>
태그 내의 부분)에서 전체 HTML 콘텐츠를 콘텐츠를 조작하고 다시 전송하는 CGI 스크립트로 보냅니다.전체 HTML 콘텐츠를 대체하면 HTTP 요청 후 HEAD 및 BODY 태그가 삭제됩니다!
이제 기존 콘텐츠를 새로운 콘텐츠로 대체하려고합니다. 불행히도 할당 후, 모든 단일 <head>
또는 <body>
태그 (뿐만 아니라 닫는 것들)가 사망합니다.
일부 경고를 사용하여 원본 HTML뿐만 아니라 반환 값을 살펴 보았습니다. 둘 다 절대적으로 예상대로입니다.
하지만 과제가 끝나면 어떤 마법이 계속됩니다. 무슨 일이 일어나는지 알아 내도록 도와주세요. 몸, 머리와 모두를 "죽이는"당신은 HTML insidee 모두를 교체하는이
document.getElementsByTagName('html')[0].innerHTML = http_request.responseText
로,
var originalBodyInnerHTML = document.body.innerHTML;
var htmlNode = document.getElementsByTagName('html')[0];
var post_parameters = encodeURIComponent(htmlNode.innerHTML);
makePOSTRequest("POST", "http://whatever.com/cgi-bin/doit.cgi", post_parameters, htmlNode);
function makePOSTRequest(method, url, parameters, htmlNode) {
var http_request = getRequestObj();
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = function()
{
if (http_request.readyState < 4)
{
var waitingPageBody = '< img src="/img/ajaxloader.gif" alt="in progress..."/>';
document.body.innerHTML = waitingPageBody;
}
else //if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
alert('1response: ' + http_request.responseText);
alert('2innerhtml: ' + document.getElementsByTagName('html')[0].innerHTML);
document.getElementsByTagName('html')[0].innerHTML = http_request.responseText;
}//end of if (http_request.status == 200)
else
{//other http statuses
alert("There was a problem (" + http_request.statusText + ", " + http_request.status + ' error)');
bodyNode.innerHTML = originalBodyInnerHTML;
}
}//end of else if http_request.readyState == 4
}
http_request.open(method, url, true); //async
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Accept", "application/atom+xml,application/xml,text/xml");
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
function getRequestObj() {
var http_request = false;
if (window.XMLHttpRequest)
{ // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/html');
}
}
else if (window.ActiveXObject)
{ // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
return http_request;
}
+1 jquery advice에 대해 – nexneo
예 im를 모두 바꾸십시오. 그러나 서버의 응답에는 이미 이러한 태그가 포함되어 있습니다. 그래서 대체해야 정확히 내가 무엇을 필요합니다. unfortunatelly이 asignment 내 몸과 머리 태그를 죽일; (. 물론 나는 또한 jquery 또는 프로토 타입을 좋아하지만 내 특별한 맥락에서 그것을 사용할 수 없습니다 ... – dforce