Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX时,Write将替换所有正文内容_Javascript_Ajax - Fatal编程技术网

Javascript 使用AJAX时,Write将替换所有正文内容

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) { //

我正在创建一个简单的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", "");
})();
(函数(){
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调用,只需执行3
document.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>