为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript Document.Write在使用AJAX时替换所有正文内容

JavaScript Document.Write在使用AJAX时替换所有正文内容

泛舟湖上清波郎朗 2019-08-19 16:22:58
JavaScript Document.Write在使用AJAX时替换所有正文内容我正在创建一个简单的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);     }使用firebug进行检查,我看不到之前的文本或之后的文本,只是<div id="mb_ad">来自test.html页面的内容。如果我删除了ajax调用并且之前只执行了3个document.writes文本,之后的文本将正确显示。jQuery不是一个选项,我必须在没有大型库的帮助下这样做,因为大小和速度是至关重要的。
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

document.write文档完成加载后,您无法使用。如果这样做,浏览器将打开一个替换当前文档的新文档。

使用该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>

放置脚本的位置并不重要,因为没有任何内容会写入文档。


查看完整回答
反对 回复 2019-08-19
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

如果你无法控制远程脚本,你可能会写这样的东西:

<script>var tmp = document.write;document.write = function () {
  document.getElementById('someId').innerHTML = [].concat.apply([], arguments).join('');};</script><script .....>document.write = tmp;

嗯,这是一个讨厌的黑客,但它似乎工作...


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 626 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信