Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
75
rated 0 times [  76] [ 1]  / answers: 1 / hits: 46113  / 15 Years ago, tue, march 2, 2010, 12:00:00

I am creating a simple ajax call that retrieves the content of a specified url and writes it to the page. The problem I am having is that it replaces the entire body contents with this information



here is the JS:



(function(){
var mb = window.mb = {};

function get_ad(url, parameters){
var result = ;
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
var avers = [Microsoft.XmlHttp, MSXML2.XmlHttp, MSXML2.XmlHttp.3.0, MSXML2.XmlHttp.4.0, MSXML2.XmlHttp.5.0];
for (var i = avers.length -1; i >= 0; i--) {
try {
http_request = new ActiveXObject(avers[i]);
if (http_request){
break;
}
} catch(e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}

http_request.onreadystatechange = function(){
if (http_request.readyState == 4) {
if (http_request.status == 200) {
gen_output(http_request.responseText);
} else {
alert('Error');
}
}
}

http_request.open('GET', url + parameters, true);
http_request.send(null);
}

function gen_output(ad_content){
document.write(<div id=mb_ad>);
document.write(ad_content);
document.write(</div>);
}

get_ad(http://localhost/test/test.html, );
})();


and here is the html:



<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>Untitled Document</title>
</head>

<body>
i am text before <br/>
<script type=text/javascript src=mb.js></script>
<br />
i am text after
</body>
</html>


using firebug to inspect, i do not see the text before or the text after, just the <div id=mb_ad> and the content from the test.html page. If i remove the ajax call and just do 3 document.writes the text before and the text after will display properly. jQuery is not an option, I have to do this without the help of a large library as size and speed are of the essence.


More From » ajax

 Answers
17

You can't use document.write once the document has completed loading. If you do, the browser will open a new document that replaces the current.



Use the innerHTML property to put HTML code inside an element:



function gen_output(ad_content){
document.getElementById('mb_ad').innerHTML = ad_content;
}


Put the element before the script, so that you are sure that it exists when the callback function is called:



i am text before
<div id=mb_ad></div>
i am text after
<script type=text/javascript src=mb.js></script>


It doesn't matter much where you place the script, as nothing will be written to the document where it is.


[#97454] Friday, February 26, 2010, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
davisbrandtm

Total Points: 387
Total Questions: 99
Total Answers: 106

Location: Tuvalu
Member since Sat, Feb 11, 2023
1 Year ago
;