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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажити где ошибка. 
:(
    Опции темы
thefree
Дата 22.5.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

<script language="Javascript">
function miniAjax() {
  this.xmlhttp = function() {
    return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    }
  
  this.send = function(u, f, m, a) {
    this.xmlhttp.open(m,u,true);
        this.xmlhttp.onreadystatechange = function() {
            if (this.xmlhttp.readyState == 4) {
                if (this.xmlhttp.status == 200) {
                    f(this.xmlhttp.responseText);
                }
            }
        }
        if (m == 'POST') {
            this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        }
        this.xmlhttp.send(a)
    }
    
  this.get = function(u,f,m,a) {
        this.send(u,f,m,a);
  }
}

var obj = new miniAjax();
function bubu(g) {
    alert(g);
}
</script>
<span onclick="obj.get('bu.html', bubu,'GET', null);">test</span>
 Почемуто ругается на  this.xmlhttp.open is not a function 

Это сообщение отредактировал(а) thefree - 22.5.2008, 19:07
PM   Вверх
smartov
Дата 22.5.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 1
Всего: 259



Ругается потому что this.xmlhttp это ссылка на функцию, а не ее результат. Чтобы получить ее результат нужно написать this.xmlhttp() и соответственно this.xmlhttp().open,... но так нельзя smile потому что каждый раз при ее вызове у вас будет создаваться новый объект, а вам это не нужно.
Поэтому для начала я бы заменил
Код

  this.xmlhttp = function() {
    return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    }

на
Код

this.xmlhttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();


Дальше ошибка произойдет во время срабатывания callback функции (onreadystatechange). 
Когда эта функция отработает в ее контексте не будет никакого this.xmlhttp, потому что this будет ссылаться уже на эту функцию, а не на miniAjax (Про контексты это отдельная тема, советую почитать целый топик который написал Sardar по этому поводу. Уйдет много вопросов)

Поэтому можно сделать например так
Код

...
    var _this = this;
    this.xmlhttp.onreadystatechange = function() {
        if (_this.xmlhttp.readyState == 4) {
            if (_this.xmlhttp.status == 200) {
                alert(_this.xmlhttp.responseText);
...



Это сообщение отредактировал(а) smartov - 22.5.2008, 19:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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