1

我无法让以下代码在 Internet Explorer 中工作,它似乎不想执行通过 Ajax 从服务器发回的代码,它什么也不做:

var ajax = new ActiveXObject('Microsoft.XMLHTTP');
ajax.open('GET','http://fromsitewebsite.com/javascript.js',true);
ajax.setRequestHeader('Connection','close');
ajax.onreadystatechange = function()
 {
   if ( ajax.readyState == 4 )
   {
    document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</script>';
   }
 };

ajax.send('');

我试过这样做,但仍然没有运气;

  document.body.innerHTML += '<script type="text/javascript">('+ajax.responseText+')()</script>')

干杯

4

6 回答 6

2

要让 IE 正确处理 script 标签的内容,您需要设置.text值。

var scrElem = document.createElement('script');
scrElem.type = 'text/javascript';
scrElem.text = ajax.responseText;
document.body.appendChild(scrElem);
于 2009-10-16T12:35:28.300 回答
1

你为什么不试试:

var scriptElmnt  = document.createElement('SCRIPT');
scriptElmnt.type = 'text/javascript';
scriptElmnt.src  = '/javascript.js';
document.body.appendChild(scriptElmnt);

如果我没记错的话,这可以按预期工作

于 2009-10-16T12:12:41.800 回答
0

尝试eval返回的代码。

于 2009-10-16T12:10:37.730 回答
0

您可能必须创建脚本节点,然后通过“innerText”属性而不是“innerHTML”设置其内容。无论如何,这是一件很奇怪的事情。您可以只添加一个脚本元素并将其“src”属性设置为您在 AJAX 调用中使用的 URL。

当你说它“什么都不做”时,你检查过脚本错误吗?

于 2009-10-16T12:11:07.767 回答
0

如果是 IE,您需要使用 execScript 方法

if ( ajax.readyState == 4 )  
{  
    if (window.execScript)  
        window.execScript(ajax.responseText);  
    else  
        document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</  script>';  
}

上面推荐的eval,在IE中有一些具体的

于 2009-10-16T12:14:56.210 回答
0

一些东西。

首先 eval() 是邪恶的。如果您在繁重的 javascript 驱动的应用程序中使用它,它会显着减慢它的速度。

另外,为什么要加载 javascript 代码?一个好主意是考虑另一种方法。如果它是一个小脚本,只需加载它,用户将缓存它并且加载时间会很舒服。如果您想将服务器值添加到页面,请使用 AJAX 并加载 JSON。如果 javascript 文件很大,请尝试将其缩小并使用 gzip 从服务器传送。如果不是上述情况,IE 支持脚本上名为 defer="defer" 的属性,它将呈现并执行您新添加的代码。但我不推荐它,因为它仅受 IE 支持。

..弗雷德里克

于 2009-10-16T12:42:00.147 回答