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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выполнение подзагруженного AJAX'ом скрипта 
:(
    Опции темы
Alix36
Дата 19.4.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот такой скриптик.
ajax.htm
Код

<!doctype html public "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<script type="text/javascript" src="lib/ajax/zxml.js"></script>
<script> var oXmlHttp = null;
var iInterval = 10000;
var divT = null;
function checkComments() {
    if (!oXmlHttp) {
        oXmlHttp = zXmlHttp.createRequest();
    } else if (oXmlHttp.readyState != 0) {
        oXmlHttp.abort();
    }    
    
    oXmlHttp.open("get", "temp.php", true);
    oXmlHttp.onreadystatechange = function () {               
        
        if (oXmlHttp.readyState == 4) {
            if (oXmlHttp.status == 200) {

display(oXmlHttp.responseText);
                
                setTimeout(checkComments, iInterval);             
            }                         
        }
    };    

    oXmlHttp.send(null);       

}
function display(sText) {
            var div = document.getElementById("divT");
            div.innerHTML = "<script>"+sText+"</script>";
        }
//if Ajax is enabled, assign event handlers and begin fetching
window.onload = function () {
    if (zXmlHttp.isSupported()) {
        checkComments();              
    }
};</script>
<div id="divT"></div>
</body>
</html> 



TEMP.php
Код

alert('yyyy');

там нет никого скрипта пока, просто ради теста, ибо будующий скрипт будет выводить именно алерт

цель- сделать по этой схеме, чтобы раз в N мсек создавался алерт(цель можно достичь намного более простым способом, но мне важен именно сам процесс обмена AJAX )

Величайшее изобретение fireBug ajax возвращает не просто текст, а текст кокто размеченный
Код

<div class="sourceRow"><a class="sourceLine">1</a><span class="sourceRowText">alert('yyyy');</span></div>
<div class="sourceRow"><a class="sourceLine">2</a><span class="sourceRowText"></span></div>
<div class="sourceRow"><a class="sourceLine">3</a><span class="sourceRowText"></span></div>
<div class="sourceRow"><a class="sourceLine">4</a><span class="sourceRowText"></span></div>

на мой взгляд из-за этого и не пашет, но как избавится от всего этого я невкурсе(
скорее всего причина в Zxml творение http://nczonline.net/downloads/zXml.zip  от но там ничего немогу понять

Чтож я хочу от вас. Укажите мне хотябы путь в котором рыть, но лучше тыкните в определенную стрку.

Добавлено через 2 минуты и 53 секунды
Возможно можно не править сам ZXML а добавить доп обработчик транслируемого текста в функции 
Код

function display(sText) {
            var div = document.getElementById("divT");
            div.innerHTML = "<script>"+sText+"</script>";
        }

где sText - текст возвращаемый ajax/

Это сообщение отредактировал(а) Alix36 - 19.4.2007, 19:58


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
Alix36
Дата 20.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мохбыть кто знаает другие кроссбраузеры


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
skyboy
Дата 20.4.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



чтоб инициировать выполнение блока script надо переписать аттрибут src. например, так:
Код

var scr= document.createElement('script');
scr.type="text/javascript";
scr.appendChild(document.createTextNode('alert(1);'));
document.getElementsByTagName('body')[0].appendChild(scr);
scr.src= ' ';
scr.src= '';

не знаю, как насчет кроссбраузерности(не нашел  в IE JavaScript - консоли  smile ), но в FireFox'e такая штука-дрюка честно вызывает алерт.
Собственно, если вставлять в созданный скрипт содержимое, пришедшее по AJAX - разницы особой  я не вижу...
---------------
подытожим: для запуска скрипта лучше использовать методы DOM, а не innerHTML
PM MAIL   Вверх
vasac
Дата 20.4.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

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



eval() есть такая функция.
а для подгрузки исполняемого js-кода гораздо правильнее идеологически, проще и кроссбраузернее — динамическое создание элемента SCRIPT. ну или json на худой конец.

___
опять Скайбой опередил smile

Это сообщение отредактировал(а) vasac - 20.4.2007, 19:52
PM WWW   Вверх
Alix36
Дата 20.4.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



skyboy, 
vasac, Во-первых спасибо что откликнулись, 
 smile я совсем блондинить начал про eval забыл с концами.
а про то что предложил skyboy  я несовсем понял, ты предлагаеш вместо всего кода это вставить, т.е. я несовсем врубился в принципе и целе твоего кода.

--- --- --- ---
Немного подумав
--- --- --- ---
Кажись доперло это ты предлагаеш посылать из PHP файла?


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
Alix36
Дата 21.4.2007, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



--- --- --- ---
Немного подумав2
--- --- --- ---
Я понял этот скрипт в ajax.html ты предлагаешь.
Тока кинь ссылку на статью о свойстве Scr 

У мя такая идея может для экономии трафика PHP скрипт будет возвращать только 1 или2 или 3(там будет всетаки скрипт который динамически изменяется.)

а тогда в ajax.html можно делоть из результата серверного скрипта переменную, и по ее значению делать определенный евал.

Добавлено через 14 минут и 12 секунд
Код

function display(sText) {
            var result = sText;
            if(result=='1')
            {
            alert('E,kz!');
            }
            
        }

Примерно так


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
skyboy
Дата 21.4.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



я динамически создаю элемент <script>(переменная Scr - имя её никак не влияет на код, а свойства этой переменной - как атрибуты у элемента script), вот его описание. Он наследует HTMLElement, который в свою очередь наследует Element, а он уналедовался от Node. Благодаря этим ссылкам, я думаю, узнаешь много чего интересного...
Я код привел для демонстрации динамической вставки скрипта в страницу и запуска этого блока на выполнение. Только и всего. Хочешь прикрутить этот код к своему AJAX'у - вместо 
Код

scr.appendChild(document.createTextNode('alert(1);'));

сделай вставку в элемент своего текста
Код

scr.appendChild(myXmlHttpRequest.responseText);

или ещё как...

PM MAIL   Вверх
Alix36
Дата 21.4.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я сделал по своему всетаки. 
см пост выше 
Но есть такая трабла, почемуто с каждым разом скрипт посылает все больше и больше запросов к серверу, и я немогу понять почему. 
еще раз JS код.
Код

var oXmlHttp = null;
var iInterval = 10000;
var divT = null;
function checkComments() {
    if (!oXmlHttp) {
        oXmlHttp = zXmlHttp.createRequest();
    } else if (oXmlHttp.readyState != 0) {
        oXmlHttp.abort();
    }    
    
    oXmlHttp.open("get", "lib/ajax/atloc.php", true);
    oXmlHttp.onreadystatechange = function () {               
        
        if (oXmlHttp.readyState == 4) {
            if (oXmlHttp.status == 200) {

display(oXmlHttp.responseText);
                
                setTimeout(checkComments, iInterval);             
            }                         
        }
    };    

    oXmlHttp.send(null);       

}
function display(sText) {
            var result = sText;
            if(result=='1')<!-- goingend -->
            {
            alert("Èû ïðèøëè!")

            }
                if(result=='2')<!-- findYes -->
            {
            alert("ÓÐÀ! Âû ÷òîòî íàøëè!")
            
            }
                if(result=='3')<!-- findNO -->
            {
            alert("Êñîæàëåíèþ, âàø èíâåíòàðü ïåðåïîëíåí è âàì ïðèøëîñü âûêèíóòü òî, ÷òî âû íàøëè!")
            
            }
            
            
        }
//if Ajax is enabled, assign event handlers and begin fetching
window.onload = function () {
    if (zXmlHttp.isSupported()) {
        checkComments();              
    }
};

помойму все дело в этом.
Код

//if Ajax is enabled, assign event handlers and begin fetching
window.onload = function () {
    if (zXmlHttp.isSupported()) {
        checkComments();              
    }
};

но без него тоже работать не будет.

Добавлено через 6 минут и 39 секунд
в почемуто еще иногда вылетает ошибка 
[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://test1.ru/lib/ajax/Chatloc.js :: anonymous :: line 15" data: no]
[Break on this error] 
if (oXmlHttp.status == 200) {

Добавлено через 9 минут и 42 секунды
гы получается клевая прогрессия 1-1-2-3-5-7-10-12 тока она не совсем прогрессия)
Этоя про количество запросов раз от раза 



--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
Alix36
Дата 21.4.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может быть это из за кэша? 


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
Sardar
Дата 4.5.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Лиса кидает исключение если в ответ приходит не 2хх, при чём делает это она на вызове .send(), который в асинхронном режиме уже по идее завершился. Хотя это удобно, обернул в try/catch, вызвал обработчик ошибки.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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