Вход

Просмотр полной версии : Скрипт внутри AJAX-запроса


Freakmeister
22.07.2012, 17:25
На сайте есть блок с сервиса tsviewer, выглядит он так:
http://jsfiddle.net/TQh3h/

Проблема в том, что при загрузке он сильно затупливает загрузку других скриптов, поэтому я попытался сделать, чтобы этот блок аджаксился.
PHP-скрипт вывода блока теперь выглядит так:
if ($_POST['ajaxing']) { //ловим AJAX-запрос
echo '<script type="text/javascript" charset="utf-8" src="http://www.tsviewer.com/ts3viewer.php?ID=909139&text=333333&text_size=10&text_family=4&js=1&text_s_weight=bold&text_s_style=normal&text_s_variant=normal&text_s_decoration=none&text_s_color_h=8B1A1A&text_s_weight_h=bold&text_s_style_h=normal&text_s_variant_h=normal&text_s_decoration_h=underline&text_i_weight=normal&text_i_style=normal&text_i_variant=normal&text_i_decoration=none&text_i_color_h=8B1A1A&text_i_weight_h=normal&text_i_style_h=normal&text_i_variant_h=normal&text_i_decoration_h=underline&text_c_weight=normal&text_c_style=normal&text_c_variant=normal&text_c_decoration=none&text_c_color_h=8B1A1A&text_c_weight_h=normal&text_c_style_h=normal&text_c_variant_h=normal&text_c_decoration_h=underline&text_u_weight=bold&text_u_style=normal&text_u_variant=normal&text_u_decoration=none&text_u_color_h=8B1A1A&text_u_weight_h=bold&text_u_style_h=normal&text_u_variant_h=normal&text_u_decoration_h=none"></script>
<noscript>Enable JavaScript or visit <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=909139">TeamSpeak Viewer</a> to display the TeamSpeak server.</noscript>';
echo 'жопа';

} else { //нормальный вывод блока
echo '<div id="ts-block">
я пустой блок
</div>';
}
А при загрузке #ts-block выполняется такой AJAX-запрос:
$.ajax({
type: "POST",
cache: false,
url: "ts-block.php",
data: "ajaxing=1",
success: function($content){
$("#ts-block").html($content);
}
});
В общем, AJAX работает, после загрузки блока, фраза "я пустой блок" исчезает, и в него попадает слово "жопа". А вот скрипт тсвьювера почему-то не отображается должным образом. На сколько я понял, он должен выполнится после загрузки на страницу, и как этого добиться я чот никак не пойму...

Deff
22.07.2012, 17:32
Ничо не понял - тем более страница топика растянута

Есть демо страница с подгрузкой ? И желательно скрипты не гонять через Аякс контент - а подгружать либо внешим скриптом либо jQuery.getScript => http://jquery-docs.ru/Ajax/jQuery.getScript/#urlcallback

Freakmeister
22.07.2012, 17:47
Демо нет, в действительности у меня там всё усложнено в стопицот раз. Но если объяснить простым языком, то сервис tsviewer предлагает засунуть к себе в нужное место страницы вот эту хренотень:
<script type="text/javascript" charset="utf-8" src="http://www.tsviewer.com/ts3viewer.php?ID=909139&text=333333&text_size=10&text_family=4&js=1&text_s_weight=bold&text_s_style=normal&text_s_variant=normal&text_s_decoration=none&text_s_color_h=8B1A1A&text_s_weight_h=bold&text_s_style_h=normal&text_s_variant_h=normal&text_s_decoration_h=underline&text_i_weight=normal&text_i_style=normal&text_i_variant=normal&text_i_decoration=none&text_i_color_h=8B1A1A&text_i_weight_h=normal&text_i_style_h=normal&text_i_variant_h=normal&text_i_decoration_h=underline&text_c_weight=normal&text_c_style=normal&text_c_variant=normal&text_c_decoration=none&text_c_color_h=8B1A1A&text_c_weight_h=normal&text_c_style_h=normal&text_c_variant_h=normal&text_c_decoration_h=underline&text_u_weight=bold&text_u_style=normal&text_u_variant=normal&text_u_decoration=none&text_u_color_h=8B1A1A&text_u_weight_h=bold&text_u_style_h=normal&text_u_variant_h=normal&text_u_decoration_h=none"></script>
<noscript>Enable JavaScript or visit <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=909139">TeamSpeak Viewer</a> to display the TeamSpeak server.</noscript>
И после загрузки этой части страницы, в этом месте отображается блок с тим-спиком, как показано по ссылке в первом посту.

Deff
22.07.2012, 17:56
Freakmeister,
Смотрите Выданную Вам ссылку -как правильно подгрузить ява скрипт через Аякс

Freakmeister
22.07.2012, 18:45
Вставил это в AJAX-запрос - не работает.
echo '
<script type="text/javascript">
$(document).ready(function() {
$.getScript("http://www.tsviewer.com/ts3viewer.php?ID=909139&text=333333&text_size=10&text_family=4&js=1&text_s_weight=bold&text_s_style=normal&text_s_variant=normal&text_s_decoration=none&text_s_color_h=8B1A1A&text_s_weight_h=bold&text_s_style_h=normal&text_s_variant_h=normal&text_s_decoration_h=underline&text_i_weight=normal&text_i_style=normal&text_i_variant=normal&text_i_decoration=none&text_i_color_h=8B1A1A&text_i_weight_h=normal&text_i_style_h=normal&text_i_variant_h=normal&text_i_decoration_h=underline&text_c_weight=normal&text_c_style=normal&text_c_variant=normal&text_c_decoration=none&text_c_color_h=8B1A1A&text_c_weight_h=normal&text_c_style_h=normal&text_c_variant_h=normal&text_c_decoration_h=underline&text_u_weight=bold&text_u_style=normal&text_u_variant=normal&text_u_decoration=none&text_u_color_h=8B1A1A&text_u_weight_h=bold&text_u_style_h=normal&text_u_variant_h=normal&text_u_decoration_h=none");
});
</script>
';

Deff
22.07.2012, 18:59
Freakmeister,
ds pfujybnFreakmeister,
:blink: Нужели трудно загнать адрес в переменную?
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var Link="http://www.tsviewer.com/ts3viewer.php?\
ID=909139&text=333333&text_size=10&text_family=4&js=1&text_s_weight=bold&text\
_s_style=normal&text_s_variant=normal&text_s_decoration=none&text_s_color_h=8B\
1A1A&text_s_weight_h=bold&text_s_style_h=normal&text_s_variant_h=normal&text_s\
_decoration_h=underline&text_i_weight=normal&text_i_style=normal&text_i_variant\
=normal&text_i_decoration=none&text_i_color_h=8B1A1A&text_i_weight_h=normal&te\
xt_i_style_h=normal&text_i_variant_h=normal&text_i_decoration_h=underline&text\
_c_weight=normal&text_c_style=normal&text_c_variant=normal&text_c_decoration=n\
one&text_c_color_h=8B1A1A&text_c_weight_h=normal&text_c_style_h=normal&text_c_\
variant_h=normal&text_c_decoration_h=underline&text_u_weight=bold&text_u_style\
=normal&text_u_variant=normal&text_u_decoration=none&text_u_color_h=8B1A1A&text\
_u_weight_h=bold&text_u_style_h=normal&text_u_variant_h=normal&text_u_decoratio\
n_h=none";
$.getScript(Link, function(){
alert("Script loaded and executed.");
alert(typeof(ts3v_toogleDiv))
});
});
</script>

Freakmeister
22.07.2012, 19:27
И какая здесь разница между тем, что я написал выше?

Deff
22.07.2012, 19:48
Freakmeister,
Нажмите - код работает - вон я взял typeof(ts3v_toogleDiv) от функции в скрипте
Ксать - такой длинный параметр - обязателен ?

Freakmeister
22.07.2012, 20:08
Код работает, но не в паре с аджаксом.

Deff
22.07.2012, 20:19
Freakmeister,
Там есть callback, где вывод allert - вместо allert и синхронизируйте
Очевидно контент должен быть загружен ранее и оттель вызывать загрузку скрипта

Freakmeister
23.07.2012, 15:33
А чем такая загрузка скрипта отличается от обычного вживления скрипта в страницу? Оно будет затупливать загрузку сайта точно так же, поэтому я думал в сторону AJAX. В общем, я пришел к кардинальному решению - отказаться от использования сервиса tsviewer.

Deff
23.07.2012, 15:38
А чем такая загрузка скрипта отличается от обычного вживления скрипта в страницу?
Тем что вы можете воткнуть его фрейм после полной загрузки DOM

Там же скриптом подгрузка - скрипт можно запустить по условию