Javascript 使用AJAX时,Write将替换所有正文内容
我正在创建一个简单的ajax调用,用于检索指定url的内容并将其写入页面。我遇到的问题是,它用这些信息替换了整个身体的内容 以下是JS:Javascript 使用AJAX时,Write将替换所有正文内容,javascript,ajax,Javascript,Ajax,我正在创建一个简单的ajax调用,用于检索指定url的内容并将其写入页面。我遇到的问题是,它用这些信息替换了整个身体的内容 以下是JS: (function(){ var mb = window.mb = {}; function get_ad(url, parameters){ var result = ""; var http_request = false; if (window.XMLHttpRequest) { //
(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", "");
})();
(函数(){
var mb=window.mb={};
函数get_ad(url、参数){
var结果=”;
var http_request=false;
如果(window.XMLHttpRequest){//Mozilla,Safari,。。。
http_请求=新的XMLHttpRequest();
if(http_请求.overrideMimeType){
http_请求。重写emimetype('text/html');
}
}如果(window.ActiveXObject){//IE
var avers=[“Microsoft.XmlHttp”、“MSXML2.XmlHttp”、“MSXML2.XmlHttp.3.0”、“MSXML2.XmlHttp.4.0”、“MSXML2.XmlHttp.5.0”];
对于(var i=avers.length-1;i>=0;i--){
试一试{
http_请求=新的ActiveXObject(avers[i]);
如果(http_请求){
打破
}
}捕获(e){}
}
}
如果(!http_请求){
警报(“无法创建XMLHTTP实例”);
返回false;
}
http_request.onreadystatechange=函数(){
如果(http_request.readyState==4){
如果(http_request.status==200){
gen_输出(http_请求.responseText);
}否则{
警报(“错误”);
}
}
}
http_request.open('GET',url+参数,true);
http_请求发送(空);
}
功能发电机输出(广告内容){
文件。填写(“”);
文件编写(广告内容);
文件。填写(“”);
}
获得广告(“http://localhost/test/test.html", "");
})();
以下是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>
无标题文件
我在前面发短信
我正在发短信
使用firebug进行检查时,我看不到前面或后面的文本,只看到
和test.html页面中的内容。如果我删除ajax调用,只需执行3document.writes
即可正确显示前面的文本和后面的文本。jQuery不是一个选项,我必须在没有大型库帮助的情况下执行此操作,因为大小和速度至关重要。您不能使用文档。在文档完成加载后编写。如果这样做,浏览器将打开一个新文档,替换当前文档
使用innerHTML
属性将HTML代码放入元素中:
function gen_output(ad_content){
document.getElementById('mb_ad').innerHTML = ad_content;
}
将元素放在脚本之前,以便在调用回调函数时确保它存在:
i am text before
<div id="mb_ad"></div>
i am text after
<script type="text/javascript" src="mb.js"></script>
我以前发过短信
我正在发短信
脚本放在哪里并不重要,因为它所在的文档中不会写入任何内容
var div = document.createElement('div');
div.id = 'mb_ad';
div.innerHTML = ad_content;
现在,您可以将此节点附加到任意位置。如果无法控制远程脚本,您可以编写如下内容:
<script>
var tmp = document.write;
document.write = function () {
document.getElementById('someId').innerHTML = [].concat.apply([], arguments).join('');
};
</script>
<script .....>
document.write = tmp;
var tmp=document.write;
document.write=函数(){
document.getElementById('someId')。innerHTML=[].concat.apply([],arguments.join(“”);
};
document.write=tmp;
好吧,这是一个令人讨厌的黑客攻击,但似乎有效…您可以使用document.body.innerHTML+=“//您的HTML代码在这里”代码>相同的Leon Fedotov答案,但更多jQuery
{
var old_write = document.write;
var $zone = $('.zone.zone_' + name);
// redefine document.write in this closure
document.write = function () {
$zone.append([].concat.apply([], arguments).join(''));
};
// OA_output[name] contains dangerous document.write
$zone.html(OA_output[name]);
document.write = old_write;
}
我对以下代码也有同样的问题:
$html[] = '<script>
if($("#mf_dialogs").length == 0) {
document.write("<div id=\"mf_dialogs\"></div>");
}
</script>';
$html[]='
if($(“#mf_对话框”).length==0){
文件。填写(“”);
}
';
以下代码将替换document.write:
$html = '<div id="dialogHolder"></div>
<script>
if($("#mf_dialogs").length == 0) {
document.getElementById("dialogHolder").innerHTML="<div id=\"mf_dialogs\"></div>";
}
</script>';
$html='1!'
if($(“#mf_对话框”).length==0){
document.getElementById(“dialogHolder”).innerHTML=“”;
}
';
您可以模拟文档的方式。编写的代码如下:
<script>
(function(script) {
var parent = script.parentNode;
var node = document.createTextNode('Surprise!');
parent.replaceChild(node, script);
})(document.currentScript);
</script>
如果没有一个单独的div
,是否有可能完成我正在尝试的任务?这应该是嵌入到客户端站点中的东西,我被要求通过一个脚本调用来完成。是的,在进行AJAX调用之前,您可以使用document.write将div写入页面。我找不到您的代码可能有什么问题,我想它需要更多的检查/断点。但是对于“jQuery不是一个选项”,我真的不同意,24ko的javascript(如果使用googlecdn,它可能会被缓存)在网页上并没有什么不同。如果你有这样强烈的要求,我不确定一个网站或甚至一个网络应用程序是一个好主意。此外,你可以使用诸如DOMAssistant或类似的轻量级库。这与此脚本将被插入到其他网站有关,因此要将类似jquery的库添加到可能使用其他库的网站,或者甚至jquery本身也会引起问题。@downvotercare评论一下为什么你对一个5年前的问题投了否决票?
<script>
document.currentScript.parentElement.innerHTML = 'Surprise!';
</script>