我正在创建一个简单的ajax调用,它检索指定url的内容并将其写入页面.我遇到的问题是它用这些信息替换了整个身体内容
这是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", "");
})();
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
使用firebug进行检查,我看不到之前的文本或之后的文本,只是<div id="mb_ad">来自test.html页面的内容.如果我删除了ajax调用并且之前只执行了3个document.writes文本,之后的文本将正确显示.jQuery不是一个选项,我必须在没有大型库的帮助下这样做,因为大小和速度是至关重要的.
Guf*_*ffa 42
document.write文档完成加载后,您无法使用.如果这样做,浏览器将打开一个替换当前文档的新文档.
使用该innerHTML属性将HTML代码放在元素中:
function gen_output(ad_content){
document.getElementById('mb_ad').innerHTML = ad_content;
}
Run Code Online (Sandbox Code Playgroud)
将元素放在脚本之前,以便在调用回调函数时确保它存在:
i am text before
<div id="mb_ad"></div>
i am text after
<script type="text/javascript" src="mb.js"></script>
Run Code Online (Sandbox Code Playgroud)
放置脚本的位置并不重要,因为没有任何内容会写入文档.
Leo*_*tov 13
如果你无法控制远程脚本,你可能会写这样的东西:
<script>
var tmp = document.write;
document.write = function () {
document.getElementById('someId').innerHTML = [].concat.apply([], arguments).join('');
};
</script>
<script .....>
document.write = tmp;
Run Code Online (Sandbox Code Playgroud)
嗯,这是一个讨厌的黑客,但它似乎工作...
| 归档时间: |
|
| 查看次数: |
40519 次 |
| 最近记录: |