猿问
下载APP

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

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不是一个选项,我必须在没有大型库的帮助下这样做,因为大小和速度是至关重要的。


泛舟湖上清波郎朗
浏览 41回答 3
3回答

慕仰0522570

document.write文档完成加载后,您无法使用。如果这样做,浏览器将打开一个替换当前文档的新文档。使用该innerHTML属性将HTML代码放在元素中:function&nbsp;gen_output(ad_content){ &nbsp;&nbsp;document.getElementById('mb_ad').innerHTML&nbsp;=&nbsp;ad_content;}将元素放在脚本之前,以便在调用回调函数时确保它存在:i&nbsp;am&nbsp;text&nbsp;before<div&nbsp;id="mb_ad"></div>i&nbsp;am&nbsp;text&nbsp;after<script&nbsp;type="text/javascript"&nbsp;src="mb.js"></script>放置脚本的位置并不重要,因为没有任何内容会写入文档。

叮当猫咪

如果你无法控制远程脚本,你可能会写这样的东西:<script>var&nbsp;tmp&nbsp;=&nbsp;document.write;document.write&nbsp;=&nbsp;function&nbsp;()&nbsp;{ &nbsp;&nbsp;document.getElementById('someId').innerHTML&nbsp;=&nbsp;[].concat.apply([],&nbsp;arguments).join('');};</script><script&nbsp;.....>document.write&nbsp;=&nbsp;tmp;嗯,这是一个讨厌的黑客,但它似乎工作...

慕的地2183247

var&nbsp;div&nbsp;=&nbsp;document.createElement('div');div.id&nbsp;=&nbsp;'mb_ad';div.innerHTML&nbsp;=&nbsp;ad_content;现在,您可以将此节点附加到您希望的任何位置。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答