контент из XMLHttpRequest response с помощью innerHTML не работает
Доброго времени суток, есть проблема с использованием вставленного динамического контента в див. Пример кода который работает
есть html страничка в ней подключен скрипт
<script type="text/javascript">$(document).ready(function(){ $('.selectboxss').selectbox(); });</script>
и еще один скрипт который вставляет в див контент из XMLHttpRequest response с помощью innerHTML. Пример выполнения innerHTML во втором скрипте с которым работает первый скрипт
document.getElementById('gg').innerHTML =('<div class="selectboxss"><div class="selectboxssvalue"><span>Язык</span><img src="arrow.png" class="arrowselect" /></div><ul class="selectboxssmenu"><li class="selectoption"><span class="flag-ru"></span> Русский</li><li class="selectoption"><span class="flag-en"></span> Английский</li><li class="selectoption"><span class="flag-fr"></span> Французский</li><li class="selectoption"><span class="flag-de"></span> Немецкий</li><li class="selectoption"><span class="flag-it"></span> Итальянский</li><li class="selectoption"><span class="flag-es"></span> Испанский</li></ul></div>');
Пример выполнения innerHTML во втором скрипте с которым НЕ работает первый скрипт
document.getElementById('gg').innerHTML = this.response;
Собственно рабочий вариант возник из вставки того что приходит в response статически. почему если инером вставлять переменную респон не работает первый скрипт, а если инером вставить текст который в респонсе то работает? текст респонса взял из консоли хрома. |
Я почти ничего не понял, но думаю проблема либо в контексте, либо в том, что запрос асинхронный.
|
m4ybe,
На момент загрузки документа $(document).ready у вас еще нет $('.selectboxss'), который появится после обработки ответа от сервера. Попробуйте
document.getElementById('gg').innerHTML = this.response;
$('.selectboxss').selectbox();
|
я уже думал о том что его нет,но я добавляю скрипт в самом верху и в хедер и если инер текстом то работает а если инер респонсом нет
последовательность действий, те в люом случае сначало идет скрипт а потом уже элемент или это не так?
this.addScript();
document.getElementById(id).innerHTML = this.response;
document.getElementById('gg').innerHTML =('<div class="selectboxss"><div class="selectboxssvalue"><span>Язык</span><img src="arrow.png" class="arrowselect" /></div><ul class="selectboxssmenu"><li class="selectoption"><span class="flag-ru"></span> Русский</li><li class="selectoption"><span class="flag-en"></span> Английский</li><li class="selectoption"><span class="flag-fr"></span> Французский</li><li class="selectoption"><span class="flag-de"></span> Немецкий</li><li class="selectoption"><span class="flag-it"></span> Итальянский</li><li class="selectoption"><span class="flag-es"></span> Испанский</li></ul></div>');
var js = {
idBox: 'js',
url_wiget: 'https://www.exmoneta.ru/init.php',
url_style: 'https://www.exmoneta.ru/wp-content/themes/exchangeboxtheme2/style.css',
init: function(id) {
if (!id) { id = this.idBox; }
if (document.getElementById(id)) {
this.addStyle();
this.addScript();
try {
var XHR = ("onload" in new XMLHttpRequest())?XMLHttpRequest:XDomainRequest;
var xhr = new XHR();
xhr.open('GET', this.url_wiget, true);
xhr.onload = function() {
if (this.response) {
document.getElementById(id).innerHTML = this.response;
console.log(this.response);
}
}
xhr.onerror = function() { console.log('onerror '+this.status); }
xhr.send();
document.getElementById('gg').innerHTML =('<div class="selectboxss"><div class="selectboxssvalue"><span>Язык</span><img src="arrow.png" class="arrowselect" /></div><ul class="selectboxssmenu"><li class="selectoption"><span class="flag-ru"></span> Русский</li><li class="selectoption"><span class="flag-en"></span> Английский</li><li class="selectoption"><span class="flag-fr"></span> Французский</li><li class="selectoption"><span class="flag-de"></span> Немецкий</li><li class="selectoption"><span class="flag-it"></span> Итальянский</li><li class="selectoption"><span class="flag-es"></span> Испанский</li></ul></div>');
} catch(e) {}
}
else { console.log('The specified block id="'+id+'" is missing'); }
},
addStyle: function() {
style = document.createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = this.url_style;
document.head.appendChild(style);
},
addScript: function() {
script = document.createElement('script');
script.async=false;
script.setAttribute('type', 'text/javascript');
script.innerHTML=('$(document).ready(function(){ $(\'.selectboxss\').selectbox(); });');
document.head.appendChild(script);
},
};
|
Цитата:
Если скрипт поставить вперед элемента, то ему не с чем будет работать. upd. Вместо "xhr.response" попробуйте "xhr.responseText". upd2. Еще у вас в строке 19 идет обращение к элементу с ID 'js', а в строке 25 с ID 'gg'. Так и задумано? |
это просто вывод в какой див выводить, те я для себя вывожу в тот что с id респонс а в gg уже скопированный текст из респонс. попробую текст. Да вот вы пишите сначала элемент, а потом скрипт, но получается мой скрипт этому протеворечит потому что я снчала делаю addscript а потом innerhtml. и вообще я уже просто в html вставляю элемент и скрипт, хоть до хоть после всегда работает
|
xhr.responseText не заработало
|
m4ybe,
В вашем примере пост №4 сразу после строки 20 (или вместо 20) вставьте
$('.selectboxss').selectbox();
И не забудьте убрать строку 25 |
Да все всем спасибо уже сделал только воткнул туда полную вставку скрипта
script = document.createElement('script');
script.async=false;
script.setAttribute('type', 'text/javascript');
script.innerHTML=('$(document).ready(function(){ $(\'.selectboxss\').selectbox(); });');
document.head.appendChild(script);
|
m4ybe,
Зачем? И еще с $(document).ready? Достаточно одной строки в обработке ответа с сервера |
| Часовой пояс GMT +3, время: 20:11. |