Tworzę proste wywołanie ajax, które pobiera treść określonego adresu URL i zapisuje go na stronie. Problem mam jest to, że zastępuje całą zawartość ciała z informacjiJavaScript Document.Write Zastępuje zawartość treści podczas korzystania z AJAX
tutaj jest 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", "");
})();
i tutaj jest 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>
użyciu Firebug do wglądu, Nie widzę tekstu przed tekstem ani tekstu po nim, tylko <div id="mb_ad">
i treści ze strony test.html. Jeśli usunę połączenie ajax i po prostu zrobię 3 document.writes
tekst przed, a tekst po będzie wyświetlany poprawnie. jQuery nie jest opcją, muszę to zrobić bez pomocy dużej biblioteki, ponieważ rozmiar i szybkość są istotą.
nie mogę znaleźć tego, co może być nie tak z kodem, myślę, że potrzebujemy więcej kontroli/punkt przerwania. , ale dla "jQuery nie jest opcją", naprawdę nie zgadzam się, 24ko javascript (który jest prawdopodobnie buforowany jeśli korzystasz z google CDN) naprawdę nie robi różnicy na stronie. Jeśli masz tak silne wymagania, nie jestem pewien, czy strona internetowa, czy nawet aplikacja sieciowa, jest dobrym pomysłem. – Mathieu
Ponadto można użyć biblioteki lekkiej, takiej jak DOMAssistant lub podobnej. – dusoft
ma to związek z tym, że ten skrypt zostanie wstawiony do innych witryn, więc dodanie biblioteki takiej jak jquery do witryny, która prawdopodobnie używa innych bibliotek, lub może nawet sama jquery, spowoduje tylko problemy. –