Исполнение скрипта в доме
Добрый день, уважаемые форумчане!
При нажатии на кнопку заношу в div код со скриптом, как мне выполнить этот скрипт? При попытке обратится к функции внутри скрипта выскакивает ошибка о том, что она не определена. |
Цитата:
|
<div id="out"></div>
при нажати на кнопку var str = http.responseText; document.getElementById('out').innerHTML = str; paint(); после нажатия <div id="out"><script>function paint(){...}</script></div> как-то так если схематично paint(); выдает как раз ошибку видимо из-за того что скрипт из дома не прочитан |
Не прочитан. Говорят такие скрипты остаются текстом.
Точно такая же тема http://stackoverflow.com/questions/4...rieved-by-ajax |
Вам придется изменить выдачу с сервера. Надо выкинуть див и теги скрипт, чтобы сделать вот так (цитируется только действующее вещество):
var s = D.createElement('script'); s.type = 'text/javascript'; try { s.appendChild(D.createTextNode(code)); D.body.appendChild(s); } catch (e) { s.text = code; D.body.appendChild(s); } где D == документ, code = собственно текст скрипта без каких либо хтмл-тегов. |
Спасибо, так работает, правда не все:cray:
|
Мда уж, криво работало из-за css.
Починил css, сделал через фреймы как и делал изначально с выдачей всего, что нужно в нем. Обидно столько времени на эти махинации и переделки ушло впустую, но зато хоть знаю теперь, как скрипт в дом добавить кроме как методом appendChild(script)+script.onload.:D |
Фреймы - зло.
На самом деле можно найти готовые скрипты загрузчиков которые сами проверяют по урлу или по алиасу был загружен такой скрипт или нет. То есть вам не нужна выдача скриптов с сервера аяксом-шмаяксом. Вы просто проверяете что если какого-то скрипта нет - то сказать чтоб выдали. Там же будет и событие загрузки, в которое можно передать функцию обеспечивающую дальнейшую работу. Кстати по js мне тут и давали лукарство: loader=(function(){ var cache={ js:{}, css:{} }, url=function(name,type){ return (location.protocol=="https:"?"https:":"http:") +'//'+location.hostname+'/ass/'+name+'/'+type+'/'+name+'.'+type; }; return { css:function(name){ var href=url(name,'css'); if(cache.css.hasOwnProperty(href)) return true; var el = D.createElement("link"); el.rel = "stylesheet"; el.href = href; cache.css[href] = 1; D.head.appendChild(el); }, js:function(name,callback) { var src=url(name,'js'); if (cache.js.hasOwnProperty(src)) callback && (callback()); else { var el = D.createElement('script'), loaded = 0; el.src = src, D.body.appendChild(el), cache.js[src] = 1; if(!callback) return true; el.onload = el.onreadystatechange = function () { if ((el.readyState && el.readyState !== 'complete' && el.readyState !== 'loaded') || loaded) return false; el.onload = el.onreadystatechange = null, loaded = 1, callback(); }; } } }; })(); |
В моей задаче фреймы наверное все-таки лучше.
Содержимое фреймов формирую я, и лучше пусть оно будет отдельно от главной страницы. А во фреймах у меня разные графики с разными количествами, которые тягают инфу из БД. Так и код краше и сумбура меньше |
Часовой пояс GMT +3, время: 04:09. |