Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает <script>...</script>, не вызывается ява скрипт 
:(
    Опции темы
TheOne
Дата 22.12.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



подскажите плз
структура страниц такая.
есть главная, подгружен файл с ява скриптами. С главной вызывается через ajax другая страница. В ней юзается класс обработки инфы, потом возвращается результат.
Проблема в том, что во второй странице и в классе (описан в третьем файле) не получается вызвать <script>. Т.е. например
echo "123123<script language=\"JavaScript\">...</script>"
в этом примере выводится ТОЛЬКО 123123 притом при просмотре хтмл кода из сгенерированной страницы вообще этот echo на виден. Если там выводить допустим форму с кнопкой и онклик'ом на ней - скрипт пашет, но мне нужно локэйшн изменить без нажатия, поэтому так не подходит.
к слову - сам скрипт, если запускаю в левом файле - работает, т.е. проблема именно в том, что я создал какие-то "условия", что ничего не работает именно в данном случае.
з.ы. описал структуру, ибо мб поможет дать диагноз траблы=) или мой....)
Подскажите плз, заранее огромное спасибо.
PM MAIL   Вверх
bars80080
Дата 22.12.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



мало понятно, но...

подгружается аяксом кусок javascript-кода? его ещё надо запустить. либо каким-то макаром через appendChild встроить, либо через другие функция а-ля eval() или document.write()

возможно...
PM MAIL WWW   Вверх
TheOne
Дата 22.12.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



не, всё гораздо проще... я описал всю ту инфу о страницах, ибо может кто-то более сведующий увидит там причину проблемы. Через аякс по большому счету приходит лишь ответ, куда нужно перейти.
Вся шняга в том, что из второй страницы и из класса (хотя в них присутствует библиотека с подгруженным яваскриптом) НЕ вызывается скрипт, т.е. ноль эмоций на теги <script>. Поэтому банально window.location на мой результат с аякса не могу сослаться... =(((
PM MAIL   Вверх
bars80080
Дата 22.12.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну, я про это и говорю. пришедший текст воспринимается именно как текст, браузер его автоматом в свою модель не встроит, надо активизировать
PM MAIL WWW   Вверх
pythonwin
Дата 22.12.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: нет
Всего: 36



Цитата(bars80080 @  22.12.2008,  14:36 Найти цитируемый пост)
ну, я про это и говорю. пришедший текст воспринимается именно как текст, браузер его автоматом в свою модель не встроит, надо активизировать 

а как это активировать?

Это сообщение отредактировал(а) pythonwin - 22.12.2008, 15:57
PM WWW GTalk Jabber   Вверх
bars80080
Дата 22.12.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну вот смотрите. есть два файла aja1.php и aja2.php:

aja1.php

Код

<html><head>
<script>
function ajax_s() {
    var dpar = '<? echo time(); ?>';
    var x = document.getElementById('per').value;
    if(window.XMLHttpRequest) {
        try { req = new XMLHttpRequest(); } 
        catch (e){}} 
    else if(window.ActiveXObject) {
        try { req = new ActiveXObject('Msxml2.XMLHTTP'); } 
        catch (e){ req = new ActiveXObject('Microsoft.XMLHTTP'); }}
    req.onreadystatechange = function() { 
        if(req.readyState == 4) ajax_o(req.responseText); }     
    req.open("GET", 'aja2.php?par=' + encodeURIComponent(x) + '&dpar=' + dpar, true);
    req.send(''); 
}
function ajax_o(x) {
    var b1 = document.getElementById('bk1');
    var y = x.split('<script>');
    if(y[1]) { var z = y[1].split('</script'); if(z[0]) x = z[0]; }
    var w = decodeURIComponent(x);
    var we = w.split("\r\n");
    for(var i = 0; i < we.length; i++) {
        eval(we[i]);
    }
}
</script>
</head>
<body>
<div id="bk1"></div>
<div id="bk2"></div>
<input id="per" />
<input type="button" onclick="ajax_s();" value="send" />
</body>
</html>


aja2.php
Код

<?php
if(!empty($_GET['par'])) $par = $_GET['par']; else $par = '';

if($par == 1) {
    $str = 'simple string. 123654';
    echo rawurlencode($str);
}
elseif($par == 2) {
    echo 'alert("qwer");';
}
elseif($par == 3) {
    echo '<script>
    function asdf() { document.getElementById("bk2").innerHTML = "simple string. 123654"; }
    asdf();
    </script>';
}
else echo 'stop. строка';
?>


введите 3 в поле на aja1.php и посмотрите, сработает ли

фокусы с rawurlencode и decodeURIComponent нужны для избегания проблем с кодировкой, но что-то сейчас их победить не удалось. но это уже другая тема
PM MAIL WWW   Вверх
TheOne
Дата 23.12.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



спасибо за скрипты.
использовал вашу функцию ajax_o, помогает для случаев, когда есть <script>
а для частей без этого тега не катит. Пытался доработать - делал eval для оставшихся частей массива"y",даже пробовал целиком всю инфу обрабатывать сплитами и декодом - что-то никак.
По большому счету меня бы всё устроило, НО вывести текст без <script> я не могу, а если юзаю document.write, у меня стирается всё старое и получаю "чистый лист" со своим сообщением.
кстати - в примере get, а я использую post, не знаю важно ли... =)
p.s. когда использую document.write, то на выходе получаю страницу с всего 2 парами тегов
<script ...src></script>
<script ...>message</script>

первая строка - это подгрузка внешнего файла  со скриптами
а вторая строка соответственно - моя обработанная инфа(не обязательно <script>, в некоторых случаях вывожу только сообщение). 
вероятно я просто не понимаю принципа работы eval и принципа "не работы" браузера с тем присланным  "неактивизированным" текстом...(
PM MAIL   Вверх
bars80080
Дата 23.12.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



вообще, мало могу посоветовать о том, как это делают обычно, т.к. сам никогда не сталкивался с подобной задачей догрузки скриптов
поэтому единственное решение - в каждом конкретном случае посвоему обрабатывать приходящую инфу

следует также упомянуть, что для незаконченной строки eval('function asdf() {'); выдаст ошибку, поэтому я засунул всю функцию в одну строку. а в случаях когда это сделать нельзя, то придётся ещё занимать и склейкой


Цитата(TheOne @  23.12.2008,  11:18 Найти цитируемый пост)
просто не понимаю принципа работы eval и принципа "не работы" браузера с тем присланным  "неактивизированным" текстом

ну, тут ничего сложного нет.
eval() - команда, исполнить введённую в неё строку как код. всё что мы в неё напишем, она исполняет как код, правда, с большими ресурсозатратами. поэтому надо соблюдать синтаксис вводимого в неё

почему браузер не обрабатывает приходящий код? да потому что он не знает что с ним делать, когда исполнять, в каком контексте. когда загружается страница, мы явно указываем где его исполнить, по ходу или потом
PM MAIL WWW   Вверх
TheOne
Дата 24.12.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



спасибо большое за ответ.
в общем, если тогда отталкиваться от задач: есть php с формой, инфа передается другому php через ajax, возвращается ответ, в зависимости от него - выбирается нужное значение для location. Как лучше поступить, если не брать во внимание мой кривой способ?
PM MAIL   Вверх
TheOne
Дата 24.12.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.7.2007

Репутация: нет
Всего: нет



еще хотел спросить про eval - как он вклинивается в работу? вот есть у нас переменная, eval же(в вашем скрипте) просто разбивает переменную на части и вроде как НЕ возвращает ничего, а "подтверждает" лишь части... т.е. выполняет части между тегами script. А с самими тегами что происходит?
p.s. поставил бы плюсик с удовольствием, но зарегившись в 2007 году, постить начал только в этой теме, а так только читал=)
PM MAIL   Вверх
bars80080
Дата 24.12.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(TheOne @  24.12.2008,  08:26 Найти цитируемый пост)
в общем, если тогда отталкиваться от задач: есть php с формой, инфа передается другому php через ajax, возвращается ответ, в зависимости от него - выбирается нужное значение для location. Как лучше поступить, если не брать во внимание мой кривой способ? 

слабо уловил. location вполне устойчивое решение для переадресации пользователя, правда, если после отправки данных пхп будет произведена перезагрузка страницы не понятно, зачем вообще приключения с аяксом. банальная перезагрузка и всё гуд


Цитата(TheOne @  24.12.2008,  08:55 Найти цитируемый пост)
еще хотел спросить про eval - как он вклинивается в работу? вот есть у нас переменная, eval же(в вашем скрипте) просто разбивает переменную на части и вроде как НЕ возвращает ничего, а "подтверждает" лишь части... т.е. выполняет части между тегами script. А с самими тегами что происходит?

да ничего, мы же их не засовываем в eval();, что правильно, учитывая что они не являются кодом javascript. eval никак не вклинивается, он просто выполняет. т.е. если у нас есть функция с eval(), значит это всё равно, что вставить дополнительный кусок кода в эту функцию



кстати, мы тут упёрлись в аякс, подгрузку и прочее, а о самом методе решения не поговорили. что мешает сделать скрытый фрэйм и по мере надобности подгружать в него краткие страницы содержащие только скрипты? по загрузке они станут доступны из родительской
PM MAIL WWW   Вверх
pythonwin
Дата 24.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: нет
Всего: 36



eval использую но можно например сделать тоже но через DOM
Код

var myfunc = function(div1){
    div1.innerHTML = new_code_html;
    scripts = div1.getElementsByTagName('SCRIPT');
    for (node_id in scripts){
        if(scripts[node_id].innerHTML){
            code = scripts[node_id].innerHTML;
            obj3 = document.createElement('SCRIPT');
            obj3.language = "JavaScript";
            obj3.type = "text/JavaScript";
            obj3.innerHTML = code;
            parentObj = scripts[node_id].parentNode
            parentObj.removeChild(scripts[node_id]);
            parentObj.insertBefore(obj3, parentObj.firstChild);
        }
    }
}

работает не всегда - если есть сложные объекты созданные через наследование и т.д. то к ним нужно дописать

Это сообщение отредактировал(а) pythonwin - 24.12.2008, 17:31
PM WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.