Estoy creando una llamada ajax simple que recupera el contenido de una URL específica y la escribe en la página. El problema que estoy teniendo es que se sustituye el contenido de todo el cuerpo con esta informaciónJavaScript Document.Write reemplaza todo el contenido del cuerpo al utilizar AJAX
aquí es la 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", "");
})();
y aquí está el 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>
usando Firebug para inspeccionar, No veo el texto antes o el texto después, solo el <div id="mb_ad">
y el contenido de la página test.html. Si elimino la llamada ajax y solo hago 3 document.writes
el texto anterior y el texto después se mostrará correctamente. jQuery no es una opción, tengo que hacer esto sin la ayuda de una gran biblioteca ya que el tamaño y la velocidad son esenciales.
no puedo encontrar lo que podría estar mal con su código, supongo que necesitan más inspecciones/punto de quiebre pero para "jQuery no es una opción", realmente no estoy de acuerdo, 24ko de javascript (que probablemente está almacenado en caché si usa google CDN) realmente no está haciendo una diferencia en una página web. Si tiene un requisito tan fuerte, no estoy seguro de que un sitio web o incluso una aplicación de red sea una buena idea. – Mathieu
además, podría usar una biblioteca liviana como DOMAssistant o similar. – dusoft
tiene que ver con el hecho de que esta secuencia de comandos se insertará en otros sitios web, por lo que agregar una biblioteca como jquery a un sitio web que probablemente esté utilizando otras bibliotecas, o incluso jquery en sí mismo, solo causará problemas. –