18.01.2011, 02:21
|
|
Профессор
|
|
Регистрация: 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.
|
|
18.01.2011, 02:37
|
|
Профессор
|
|
Регистрация: 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>
извините конечно если это очень простой вопрос, но ООП на ЯС я недавно начал читать, а тут с таким натолкнулся, уже весь вечер потратил, всё просмотрел, ничего толкового не нашел((
|
|
18.01.2011, 17:21
|
|
|
|
Регистрация: 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'а
|
|
19.01.2011, 00:28
|
|
Профессор
|
|
Регистрация: 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.
|
|
19.01.2011, 21:18
|
|
Профессор
|
|
Регистрация: 19.05.2010
Сообщений: 187
|
|
ааа... посмотрел на этот polling и понял что надо программировать сервер не на ПХП..((
так вот у меня вопрос, что лучше использовать, если надо нормальной поллинг, хотя бы с пингом 200мс, особенно когда будет не один пользователь))
ну я почитал, пока только на ум приходит для этого Node.js
ну или чистый серверный JavaScript, или все-таки стоит на Python или Ruby???
|
|
19.01.2011, 21:44
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Slawaq
|
программировать сервер не на ПХП
|
Facebook, Amazon, Flickr, Digg, Вконтакте и пр. не показатель?
Сообщение от Slawaq
|
или все-таки стоит на Python или Ruby
|
а может на С++? (сейчас проектирую свой движок на PHP+C++)
выбирайте, тот язык, который вы знаете
|
|
19.01.2011, 22:36
|
|
Профессор
|
|
Регистрация: 19.05.2010
Сообщений: 187
|
|
Сообщение от monolithed
|
а может на С++? (сейчас проектирую свой движок на PHP+C++)
выбирайте, тот язык, который вы знаете
|
та я и сам хотел написать свой движок на Ява(потом думал тоже на Си++ но кросс-платформеность очень была важна), но нету много времени чтобы разбирать роботу клиент-серверных приложения на ява, от и решил использовать уже что-то готовое.
насчёт этого
Сообщение от monolithed
|
Вконтакте
|
"В Контакте — на базе node.js разработан XMPP-сервер." так что это уже зависит от целей, я же не говорю что мне надо будет всё делать на Ноде.яс, а поллинг, просто я хочу узнать мнение тех кто уже может роботал с тем и с тем чтобы можно было сравнить плюси и минусы, и чтобы потом я смог правильно сделать выбор)
но насчёт разработки своего сервера тоже не откажусь, только не тот форум чтобы тут что-то по Яве писать или спрашивать)
но все-таки помогите выбрать лучшее решение, если мне надо чтобы было ужо готово через месяц, при том что я почти не знаю ни Ноде,яс, ни Питон, ни Руби, ни Ява, но знаю ООП на Яве=)), и работал с Явой (но не учил нормально), а готово это означает приложение которое могло бы, получать данные по сокетам, отправлять данные на сокеты, и обрабатывать некоторые данные
|
|
19.01.2011, 23:18
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Slawaq
|
посмотрел на этот polling и понял что надо программировать сервер не на ПХП..((
|
Если сильно хочется, можно и на PHP http://dklab.ru/lib/dklab_realplexor/
|
|
19.01.2011, 23:38
|
|
Профессор
|
|
Регистрация: 19.05.2010
Сообщений: 187
|
|
да интересно там вышло, но я думаю мне бы полезно было сейчас и самому что-то написать, так что наверное буду пробивать на Яве, но если не буду успевать, то буду наверно уже брать этот движок, спс за ссылку))
|
|
|
|