Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2011, 02:21
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

OOP in JavaScript
мои знания не позволили мне решить такую проблему, как написания объекта для взаимодействия с сервером через заголовки, а проблема у меня как раз возникла при написании функции onload, ну короче сами смотрите
var AJAX={
    getData:function(){
        this.open=function(type,value){
            var openXHR=new AJAX.createCONN(type,value);
            $catch(openXHR.getIdSpace(),this.gets)} 
        this.data='';
        this.onload=function(){};
        this.gets=function(n){this.data+=n;this.onload()} 
    },
    createCONN:function(head,value){
        this.xmlhttp=new XMLHttpRequest();
        var xmlhttp=this.xmlhttp; 
        var id=$space.length+1; 
        this.xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4){
                $space[id]=decodeURI(xmlhttp.getResponseHeader('riseup').replace(/.*\:(.*)/,'$1'));
            }
        }
        this.xmlhttp.open("HEAD","route.php",true);
        this.xmlhttp.setRequestHeader('riseup',encodeURI(head)+':'+encodeURI(value));
        this.xmlhttp.send(null);
        this.getIdSpace=function(){return id};
    }
}
var $space=[];
function $catch(id,func){
    setTimeout(function(){
        if(!$space[id]){
        setTimeout(arguments.callee,0)
        }else{return func.call($space[id])
}},0)}
//---------------------------------------------------------------------
var testXHR=new AJAX.getData();
test.onload=function(){alert(testXHR.data)}
test.open('test','myDat');

после проверки ничего не происходит, а консоль хрома пишет:
"Uncaught TypeError: Object MyDat has no method 'onload'",
смотря на эту ошибку я недоумеваю, потому что не могу понять где у меня появляться "Object MyDat", но кажется проблема легко решается только не знаю как((

Последний раз редактировалось Slawaq, 18.01.2011 в 02:25.
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2011, 02:37
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

от кстати статический пример моей ошибки
<html>
<head>
</head>
<body>
<script type="text/javascript">
function mm(){
    this.r=0;
    this.m1=function(n){alert('YES, WE HAVE YOUR CLICK ')}
    this.che=function(){try{this.m1();}catch(error){alert(error);}}
    this.cheking=function(){
        $catch(this.che)
    }
}
var e=new mm()
e.cheking();
function $catch(func){
    setTimeout(function(){
        if(!e.r){
        setTimeout(arguments.callee,0)
        }else{return func.call(e.r)// если убрать аргумент тогда оно вообще такое пишет:"Uncaught TypeError: Object [object DOMWindow] has no method 'm1'"
}},0)}
</script>
<input onclick="e.r=1" />
</body>
</html>


извините конечно если это очень простой вопрос, но ООП на ЯС я недавно начал читать, а тут с таким натолкнулся, уже весь вечер потратил, всё просмотрел, ничего толкового не нашел((
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2011, 17:21
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

во-первых, почему не воспользовался существующими велосипедами, а начал свой изобретать, особенно при том, что "мои знания не позволили мне..."?

во-вторых, код мутный какой-то. Почему не так? (забил на утечки)
function CustomAjax( name, value, onLoad ){
    var req = this._req();
    req.open('HEAD', 'route.php', true);
    req.onreadystatechange = function(){
        if( req.readyState == 4 &&   req.status == 200 ){
            var v = decodeURI(
                req.getResponseHeader('riseup')
                    .replace(/.*\:(.*)/, '$1')
            );
            onLoad( v );
        }
    };
    req.send( null );
}

CustomAjax.prototype._req = function(){
    if( window.XMLHttpRequest )
        return new window.XMLHttpRequest();
    else
        try {
            return new ActiveXObject('Msxml2.XMLHTTP');
        } catch( e ){
            return new ActiveXObject('Microsoft.XMLHTTP');
        }
};

new CustomAjax().get('test', 'myDat', function( v ){
    alert( v );
})


в-третьих надо учиться отлаживать код. Сделай console.log(this) и загляни в консоль firebug'а
Ответить с цитированием
  #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.
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2011, 21:18
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

ааа... посмотрел на этот polling и понял что надо программировать сервер не на ПХП..((
так вот у меня вопрос, что лучше использовать, если надо нормальной поллинг, хотя бы с пингом 200мс, особенно когда будет не один пользователь))
ну я почитал, пока только на ум приходит для этого Node.js
ну или чистый серверный JavaScript, или все-таки стоит на Python или Ruby???
Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2011, 21:44
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Slawaq
программировать сервер не на ПХП
Facebook, Amazon, Flickr, Digg, Вконтакте и пр. не показатель?
Сообщение от Slawaq
или все-таки стоит на Python или Ruby
а может на С++? (сейчас проектирую свой движок на PHP+C++)
выбирайте, тот язык, который вы знаете
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2011, 22:36
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

Сообщение от monolithed Посмотреть сообщение
а может на С++? (сейчас проектирую свой движок на PHP+C++)
выбирайте, тот язык, который вы знаете
та я и сам хотел написать свой движок на Ява(потом думал тоже на Си++ но кросс-платформеность очень была важна), но нету много времени чтобы разбирать роботу клиент-серверных приложения на ява, от и решил использовать уже что-то готовое.
насчёт этого
Сообщение от monolithed Посмотреть сообщение
Вконтакте
"В Контакте — на базе node.js разработан XMPP-сервер." так что это уже зависит от целей, я же не говорю что мне надо будет всё делать на Ноде.яс, а поллинг, просто я хочу узнать мнение тех кто уже может роботал с тем и с тем чтобы можно было сравнить плюси и минусы, и чтобы потом я смог правильно сделать выбор)
но насчёт разработки своего сервера тоже не откажусь, только не тот форум чтобы тут что-то по Яве писать или спрашивать)
но все-таки помогите выбрать лучшее решение, если мне надо чтобы было ужо готово через месяц, при том что я почти не знаю ни Ноде,яс, ни Питон, ни Руби, ни Ява, но знаю ООП на Яве=)), и работал с Явой (но не учил нормально), а готово это означает приложение которое могло бы, получать данные по сокетам, отправлять данные на сокеты, и обрабатывать некоторые данные
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2011, 23:18
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Slawaq
посмотрел на этот polling и понял что надо программировать сервер не на ПХП..((
Если сильно хочется, можно и на PHP http://dklab.ru/lib/dklab_realplexor/
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2011, 23:38
Аватар для Slawaq
Профессор
Отправить личное сообщение для Slawaq Посмотреть профиль Найти все сообщения от Slawaq
 
Регистрация: 19.05.2010
Сообщений: 187

Сообщение от Kolyaj Посмотреть сообщение
Если сильно хочется, можно и на PHP http://dklab.ru/lib/dklab_realplexor/
да интересно там вышло, но я думаю мне бы полезно было сейчас и самому что-то написать, так что наверное буду пробивать на Яве, но если не буду успевать, то буду наверно уже брать этот движок, спс за ссылку))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Книга] Stoyan Stefanov, Javascript Patterns Dmitry A. Soshnikov Учебные материалы 20 13.08.2013 11:37
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43