Ich erstelle einen einfachen Ajax-Aufruf, der den Inhalt einer angegebenen URL abruft und auf die Seite schreibt. Das Problem, das ich habe ist, dass es den gesamten Körper Inhalte mit diesen InformationenJavaScript Document.Write Ersetzt alle Körperinhalte bei Verwendung von AJAX
hier ist die JS ersetzt:
(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", "");
})();
und hier ist der 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>
mit Firebug zu inspizieren, Ich sehe nicht den Text vor oder den Text nach, nur die <div id="mb_ad">
und den Inhalt von der test.html Seite. Wenn ich den Ajax-Anruf entferne und einfach 3 document.writes
den Text vor und den Text danach richtig anzeigen. jQuery ist keine Option, ich muss dies ohne die Hilfe einer großen Bibliothek tun, da Größe und Geschwindigkeit von wesentlicher Bedeutung sind.
ich nicht finden kann, was mit Ihrem Code falsch sein könnte, ich denke, es ist mehr Kontrolle benötigen/Unterbrechungspunkt. aber für die "jQuery ist keine Option", stimme ich wirklich nicht zu, 24ko von Javascript (das ist wahrscheinlich zwischengespeichert, wenn Google CDN verwenden) macht wirklich keinen Unterschied auf einer Webseite. Wenn Sie diese starke Anforderung haben, bin ich mir nicht sicher, ob eine Website oder gar eine Netzwerkanwendung eine gute Idee ist. – Mathieu
Darüber hinaus könnten Sie Lightweight-Bibliothek wie DOMAssistant oder ähnliches verwenden. – dusoft
es hat mit der Tatsache zu tun, dass dieses Skript in andere Websites eingefügt wird, so dass eine Bibliothek wie Jquery zu einer Website hinzufügen, die wahrscheinlich andere Bibliotheken oder vielleicht sogar jquery selbst verwendet, wird nur Probleme verursachen. –