Тема: OOP in JavaScript
Показать сообщение отдельно
  #4 (permalink)  
Старый 19.01.2011, 00:28
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

вышло всё-таки и самому разобраться)
всё, я всё исправил, и убрал всё ненужное, и более универсализировал функцию $catch, чтобы ею можно было бы проверять изменения разных переменных, и для теста написал часики, серверные))
<html><body>
<script type='text/javascript'>var AJAX={
    connect:function(){
        this.data='';
        this.onget=function(){};
        this.open=function(type,value){
            AJAX.createCONN(type,value,this);
            $catch(this.onget,'data',this)} 
    },
    createCONN:function(head,value,obj){
        xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4){
                obj.data=xmlhttp.getResponseHeader('Date')/*decodeURI(xmlhttp.getResponseHeader('riseup').replace(/.*\:(.*)/,'$1')); это должно быть в нормальном виде, но для примера уберём))*/
            }
        }
        xmlhttp.open("HEAD","index.php",true);
        xmlhttp.setRequestHeader('riseup',encodeURI(head)+':'+encodeURI(value));
        xmlhttp.send(null);
    }
}
function $catch(func,name,obj){
        obj=obj || window
        p1=obj[name];
    setTimeout(function(){
        if(p1==obj[name]){
        setTimeout(arguments.callee,0)
        }else{return func.call(obj)
}},0)}
</script>
<div style='border:1px gray solid;color:gray;width:200px;text-align:center;font-family:Tahoma;font-size:11px;' id='serverClock'></div>
<script type="text/javascript">
var stop=true;
var onlineClock=new AJAX.connect();
onlineClock.onget=function(){document.getElementById('serverClock').innerHTML=this.data}
function go(){setTimeout(function(){if(!stop){onlineClock.open();setTimeout(arguments.callee,1000)}},0)}
</script>
<input type='button' value='on server clock' onclick='if(stop){this.value=this.value.replace("on","off");stop--;go()}else{this.value=this.value.replace("off","on");stop++;}'>
</body></html>

от такой polling на head-ах, но это как дополнение, в основном оно будет пользоваться для одноразовой загрузки пакета каких-то данных
P.S. насчёт Ослика я сам вижу что не кросс-браузерно, но там куда я это поставлю это не играет роли, так как там уже есть некоторые модули которые не работают в ИЕ, и да это, я и сам знаю что это не очень прелестно)))
P.P.S а насчёт утечек объясни по-подробней, а то это очень важно, и где оно может проявиться, а если можешь то ссылку кинь на такую инфу))

Последний раз редактировалось Slawaq, 19.01.2011 в 02:19.
Ответить с цитированием