2009-10-16 1 views
1

У меня возникли проблемы с получением кода для работы в Internet Explorer, он, похоже, не хочет выполнять код, отправленный с сервера через Ajax, он просто ничего не делает:Ajax: ввод кода в Internet Explorer

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>') 

Приветствия

ответ

2

К get IE to handle the content of the script tag properly, вам необходимо установить значение .текст.

var scrElem = document.createElement('script'); 
scrElem.type = 'text/javascript'; 
scrElem.text = ajax.responseText; 
document.body.appendChild(scrElem); 
+0

Спасибо за решение, работает как ожидается –

0

Попробуйте eval возвращаемый код.

0

Возможно, вам придется создать узел сценария, а затем установить его содержимое через атрибут «innerText» вместо «innerHTML». В любом случае это странно. Вы можете просто добавить элемент сценария и установить его атрибут «src» на URL-адрес, который вы используете в вызове AJAX.

Когда вы говорите, что это просто ничего не делает, вы проверили ошибки скрипта?

1

Почему бы вам не попробовать:

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

Если я правильно помню, это работает, как ожидалось

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

0

Несколько вещей.

Прежде всего eval() - это зло. Если вы используете его в тяжелом приложении с поддержкой javascript, это значительно замедлит его.

Кроме того, зачем загружать код javascript? Хорошая идея - подумать о другом подходе. Если это небольшой скрипт, просто он загружен, пользователь будет кэшировать его, а время загрузки будет комфортным. Если это значения сервера, которые вы хотите добавить на свою страницу, используйте AJAX и загрузите JSON. Если файл javascript большой, попробуйте его уменьшить и доставить с сервера с помощью gzip. Если не указано выше, IE поддерживает атрибут в сценарии с именем defer = "defer", он будет отображать и выполнять ваш новый добавленный код. Но я бы не рекомендовал его, так как он поддерживается только IE.

..fredrik