我无法让以下代码在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>')
干杯
答案 0 :(得分:2)
要get IE to handle the content of the script tag properly,您需要设置 .text 值。
var scrElem = document.createElement('script');
scrElem.type = 'text/javascript';
scrElem.text = ajax.responseText;
document.body.appendChild(scrElem);
答案 1 :(得分:1)
你为什么不试试:
var scriptElmnt = document.createElement('SCRIPT');
scriptElmnt.type = 'text/javascript';
scriptElmnt.src = '/javascript.js';
document.body.appendChild(scriptElmnt);
如果我没记错的话,这可以按预期工作
答案 2 :(得分:0)
尝试eval
返回的代码。
答案 3 :(得分:0)
您可能必须创建脚本节点,然后通过“innerText”属性而不是“innerHTML”设置其内容。无论如何,这是一种奇怪的事情。您只需添加一个脚本元素并将其“src”属性设置为您在AJAX调用中使用的URL。
当你说它“什么都不做”时,你检查过脚本错误吗?
答案 4 :(得分: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中有一些特定的
答案 5 :(得分:0)
一些事情。
首先,eval()是邪恶的。如果你在一个繁重的javascript驱动的应用程序中使用它,它将显着减慢它。
另外,为什么要加载javascript代码?一个好主意是想到另一种方法。如果它是一个小脚本只是加载它,用户将缓存它,加载时间将是舒适的。如果要添加到页面的服务器值使用AJAX并加载JSON。如果javascript文件很大,请尝试缩小它并使用gzip从服务器传送它。如果不是上述内容,IE支持名为defer =“defer”的脚本属性,它将呈现并执行新添加的代码。但我不推荐它,因为它只受IE支持。
..弗雷德里克