Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.10.2010, 15:34
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

ООП: теряется метод
Такое дело, вот написал под себя маленькую функцию для удобства AJAX соединения:
function ajax(params, url, method, box, callback){
  this.params=params; this.queryStr=''; this.url=url; this.method=method; this.box=box;
  if(callback){this.callback=callback;}
}

ajax.prototype.query=function(){
  xmlhttp.open(this.method, this.url, true);
  xmlhttp.onreadystatechange = function(){
  if(xmlhttp.readyState==4){
  if(this.box!=null){
  if(typeof(this.box)!='string'){this.box.innerHTML=xmlhttp.responseText;}
  else {$(this.box).innerHTML=xmlhttp.responseText;}}
  if(this.callback && typeof(this.callback)=='function'){alert('true'); this.callback();}}}
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
  for(var key in this.params){
  if(keys==0){this.queryStr+=key+'='+this.params[key];} else 
  {this.queryStr+='&'+key+'='+this.params[key];}
  keys++;}
  xmlhttp.send(this.queryStr);
  }

Вызываю так:
var someVar=new ajax({a:5, b:6, c:7}, '/some.php', 'post', null, function(){...});
someVar.query();

И почему то в методе query нет доступа к this.callback, а если проверку typeof запустить то покажет 'undefined', не могу понять почему, ведь к остальным свойствам доступ отличный.
P.S. Сам код правильный, проверял.

Последний раз редактировалось Vulkan, 09.11.2010 в 19:48.
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2010, 15:45
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

а с чего вы решили, что this внутри onreadystatechange будет показывать именно на ваш объект?!
он должен указывать на window, так как вызывается именно в его контексте.
почитайте про замыкания, и объект this
в статьях на этом сайте вполне хорошо про это написано
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2010, 16:13
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Gvozd, да, Вы правы, совсем забыл что callback вызываю в контексте onreadystatechange, спасибо, почитаю про замыкания.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
универсальный метод sg550 Events/DOM/Window 4 22.08.2010 03:44
ООП PHP вопрос mycoding Серверные языки и технологии 9 03.06.2010 02:57
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29
1. Календарь 2. объект String метод getEMail Мандариновая Общие вопросы Javascript 8 31.10.2008 11:33