0

我正在使用下面的这个 Ajax 脚本进行跨域 Ajax 调用,如果我使用它可以正常工作alert(txt);,但是当我将其更改document.write(txt);为打印结果时它停止工作并且我不确定它为什么不工作,

这可能是愚蠢的,但我就是想不通

    function xss_ajax(url) {
        var script_id = null;
        var script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', url);
        script.setAttribute('id', 'script_id');

        script_id = document.getElementById('script_id');
        if(script_id){
            document.getElementsByTagName('head')[0].removeChild(script_id);
        }

        // Insert <script> into DOM
        document.getElementsByTagName('head')[0].appendChild(script);
    }

    function callback(data) {
        var txt = '';
        for(var key in data) {
           txt += key + "  " + data[key];

        }
      //alert(txt);
      document.write(txt);
   }

    var url = "http://myserver.com";
4

1 回答 1

1

我相信在某些浏览器中,您无法在文档加载完成后调用 document.write...

编辑:我要删除的这些东西肯定行不通。正如 Teemu 指出的那样,调用“open”会清除文档。此外,MDN 表示,如果您自己没有调用 .write,那么调用 .write 将隐式调用 .open。 另一种可能性是文档没有呈现,因为当您开始编写时,您必须关闭流。您可以尝试(不确定这是否有效):

document.open();
document.write('stuff');
document.close();

但是,我强烈建议您只使用更标准的方法来写入文档,例如 appendChild 或使用框架(例如 jQuery):

function callback(data) {
    var txt = '';
    for(var key in data) {
       txt += key + "  " + data[key];

    }
    //alert(txt);
    //document.write(txt);
    document.body.appendChild(document.createTextNode(txt));
}
于 2012-04-10T20:26:04.590 回答