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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проконсультируёте по оптимизации и недочётам 
:(
    Опции темы
thefree
Дата 26.5.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Собственно есть вот код
Код

var ajax = {

    options: {
        method: 'post',
        async: true,
        onStateChange: function() { },
        onFailure: function() { },
        onSuccess: function() { }
    },

    setOptions: function(content) {
        for (var i in content) {
            this.options[i] = content[i];
        }
    },
    
    form2query: function(isform) {
        var query = [];
        for (var i=0; i<isform.elements.length; i++) {
            switch (isform.elements[i].type.toLowerCase()) {
                case "textarea": query[query.length] = isform.elements[i].name + "=" + encodeURI(isform.elements[i].value); break;
                case "radio": if(isform.elements[i].checked) query[query.length] = isform.elements[i].name + "=" + isform.elements[i].value; break;
                case "checkbox": if(isform.elements[i].checked) query[query.length] = isform.elements[i].name + "=" + isform.elements[i].value; break;
                default: query[query.length] = isform.elements[i].name + "=" + isform.elements[i].value;
            }
        }
        return query.join('&');
    },
    
    transport: (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest()),

    send: function(url, data) {
        this.transport.open(this.options.method, url, this.options.async);
        var self = this;
        this.transport.onreadystatechange = function() {
            if (self.transport.readyState == 4) {
                if (self.transport.status >= 200 && self.transport.status < 300) {
                    self.options.onSuccess(self.transport.responseText);
                } else {
                    self.options.onFailure(self.transport.status);
                }
            } else {
                self.options.onStateChange(self.transport.readyState);
            }
        }
        if(this.options.method == 'post') this.transport.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        this.transport.send((data ? data : null));
    }

}

Подскажите что подправить и что возможно стоит добавить.
PM   Вверх
Padonak
Дата 30.5.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.5.2008
Где: Ростов-на-Дону

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



Цитата(thefree @ 26.5.2008,  10:24)
Собственно есть вот код
...
Подскажите что подправить и что возможно стоит добавить.

А вот прикинь пришел бы Гоголь к каким-нибудь кентам своим шмякнул им на стол рукопись "Мертвых душ" и сказал: 
- Ну чо перцы-дэкуэльяры вот почитайте и скажите мне где подправить или может чота переписать надо на ваш взгляд...
PM MAIL WWW ICQ   Вверх
Pokoinik
Дата 30.5.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 17.3.2007
Где: /dev/null

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



thefree, я бы подправил вот эту часть... добавил обработку двумерных массивов.. а так смотрите сами, вам же этим кодом пользоваться...
Код

    setOptions: function(content) {
        for (var i in content) {
            this.options[i] = content[i];
        }
    }



--------------------
ICQ: 490-993
Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают!!!
Опасайтесь людей верующих, ибо у них есть боги, которые им все прощают.

Делай или не делай! Никаких попробую!
Йода (Yoda), мастер-джедай
PM MAIL ICQ   Вверх
thefree
Дата 5.6.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да он стал уже таким. После оптимизации и попытки кроссплатформенности.
Код

var ajax = {

    options: {
        method: 'post',
        async: true,
        onStateChange: function() { },
        onFailure: function() { },
        onSuccess: function() { }
    },

    setOptions: function(content) {
        for (var i in content) {
            this.options[i] = content[i];
        }
    },
    
    transport: (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest()),

    send: function(url, data) {
        if (this.running) return this;
        this.running = true;
        this.transport.open(this.options.method, url, this.options.async);
        var self = this;
        this.transport.onreadystatechange = function() {
            if (self.transport.readyState == 4 && self.running) {
                self.running = false;
                if (self.transport.status >= 200 && self.transport.status < 300) {
                    self.options.onSuccess(self.transport.responseText);
                } else {
                    self.options.onFailure(self.transport.status);
                }
            } else {
                self.options.onStateChange(self.transport.readyState);
            }
        }
        if (this.options.method == 'post') this.transport.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        this.transport.send((data ? data : null));
    },
    
    collect: function(a, f) {
        var n = [];
        for(var i = 0; i < a.length; i++) {
            var v = f(a[i]);
            if (v != null) n.push(v);
        }
        return n;
    },
    
    serialize: function(f) {
        var r = [];
        var g = function(n) {
            return f.getElementsByTagName(n)
        };
        var nv = function(e){
            if (e.name) r[r.length] = encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value);
        };
        this.collect(g('input'), function(i) {
            if ((i.type != 'radio' && i.type != 'checkbox') || i.checked) return nv(i);
        });
        this.collect(g('select'), nv);
        this.collect(g('textarea'), nv);
        return r.join('&');
    }

}

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


 




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


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

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