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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Prototype in Firefox, использование прототипов в браузере Файр 
V
    Опции темы
t77
  Дата 12.7.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.

Имеется код, с использованием прототипов, который работает в браузере ИЕ.
Но почему то он не работает в браузере Файрфокс...
Как использовать прототипы в Gecko-браузерах ?
PM MAIL   Вверх
skyboy
Дата 12.7.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



при помощи javascript-кода, конечно же!
а код, который причина проблемы, и дальше никому не показывай. 
уворуют ещё.
код, который работает только под IE.

Добавлено через 5 секунд
 smile 
PM MAIL   Вверх
t77
  Дата 12.7.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так вот выглядит код:

Код


   var xmlDom = null;
   
   if (window.ActiveXObject)
   {
        // code for IE
        xmlDom = new ActiveXObject("microsoft.xmlDom");
        xmlDom.async = "false";
        xmlDom.preserveWhiteSpace = true;
   }
   else
   { 
       // code for Firefox 
       xmlDom = document.implementation.createDocument("","",null);
   }    
       
    
    
    var xmlLoader = new XmlLoader(xmlDom, "/folder1/folder2", "http://server:7000");    
    xmlLoader.addParameter("id", "150");    
    xmlLoader.addParameter("item_order_by", "order_id");
    

    if (!xmlLoader.open())
        return reportError(xmlLoader, "Getting xml with id: 150");

    var xmlDoc = xmlLoader.resultXml;
    xmlLoader.close();

    var allData = xmlDoc;
   
}


function XmlLoader (xmlObject, strAction, urlLocation, callback)
{
    this.action = strAction;          
    this.urlLoc = urlLocation;        

    this.arrParams = new Array();     
    this.paramString = "";
    this.resultXml = null;
    this.xmlObj = xmlObject;
    this.status = "";


    if (typeof XmlLoader._initialized == "undefined")
    {
        // [Public]
        // Add a parameter to the request.
        XmlLoader.prototype.addParameter = function (pName, pValue)
        {
            this.arrParams.push(pName, pValue);
            this.updateString();
        }

        // [Public]
        // Removes a parameter (and rebuilds the url string)
        XmlLoader.prototype.removeParameter = function (pName)
        {
            var newArr = new Array();
            for (var i = 0 ; i < this.arrParams.length ; i+=2)
            {
                if (this.arrParams[i] != pName)
                {
                    newArr.push (this.arrParams[i], this.arrParams[i+1]);
                }

            }

            this.arrParams = newArr;
            this.updateString();
        }

        // [Private]
        // Rebuilds the ParamString when parameters have changed etc
        XmlLoader.prototype.updateString = function ()
        {
            var str = "";

            for (var i = 0 ; i < this.arrParams.length ; i += 2)
            {
                if (this.toIso != null)
                    str += this.arrParams[i] + "=" + this.arrParams[i + 1];
                else
                    str += this.arrParams[i] + "=" + this.arrParams[i + 1];

                if (i < this.arrParams.length - 2)
                    str += "&";
            }

            this.paramString = str;
        }

        // [Public]
        // Returns the parameter string
        XmlLoader.prototype.getParamString = function ()
        {
            return this.paramString;
        }

        // [public]
        // Sends request to the server. Results are stored in "resultXml" property (DOMDocument object)
        XmlLoader.prototype.open = function()
        {
            // Trick to determine which type of object we were sent with
            var isXmlHttp = true;
            if (this.xmlObj.async != null)
            {
                isXmlHttp = false;
            }

            // Initialize the result XML
            this.resultXml = null;
            this.resultXml = new ActiveXObject("Msxml.DOMDocument");
            this.resultXml.async = "false";

            if (isXmlHttp)
            {
                // Load using Microsoft.XmlHttp object
                this.xmlObj.open("POST", this.urlLoc + this.action , false);
                this.xmlObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                this.xmlObj.send(this.paramString);

                this.xmlObj.responseXML.load(this.xmlObj.responseStream);  // xmlObj.responseText has a problems in some languages
                this.resultXml.loadXML(this.xmlObj.responseXML.xml);

            }
            else
            {
                // Load using Microsoft.XmlDom object
                this.xmlObj.async = false;
                var url = this.urlLoc + this.action + "?" + this.paramString;
                this.xmlObj.load(url);

                if (this.xmlObj.documentElement != null)
                    this.resultXml.loadXML(this.xmlObj.documentElement.xml);
            }

            if (this.resultXml == null)
            {
                this.resultXml.loadXML("<ERROR><MSG>Internal Error: document received from server is empty</MSG></ERROR>");
                return false;
            }

            var message = this.resultXml.selectSingleNode('//MESSAGE');

            if (message != null)
            {
                this.status = message.getAttribute("status");

                if (this.status == "SUCCESS")
                    return true;
                else
                {
                    try
                    {
                        this.messageId =  message.getAttribute("id");
                    }
                    catch(e) {}

                    return false;
                }
            }

            if (this.resultXml.selectSingleNode('//ERROR'))
                return false;

            return true;
        }

        // [public]
        // Rids of the xmlDoc
        XmlLoader.prototype.close = function()
        {
            this.resultXml = null;
        }

        // [public property]
        // Returns the xmlDoc object
        XmlLoader.prototype.resultXml = function()
        {
            return this.resultXml;
        }

        XmlLoader._initialized = true;
    }
}


Помогите пожалуйста подправить код под браузер Firefox.
PM MAIL   Вверх
Amphiluke
Дата 12.7.2010, 18:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Сильно не вчитывался, но тут, по-моему не в прототипах дело, а в использовании методов, которые поддерживаются в IE, но не в FF (типа loadXML, selectSingleNode, а также свойства xml объекта documentElement).

Цитата(t77 @  12.7.2010,  20:43 Найти цитируемый пост)
this.resultXml = new ActiveXObject("Msxml.DOMDocument");

Ну, это, понятно, вообще не про FF… Вначале у вас был использован правильный (кроссбраузерный) способ создания XML-документа, а тут что-то решили не заморачиваться.


Далее, например, метод loadXML нужно для FF заменить методом parseFromString объекта DOMParser. Метод selectSingleNode не знаю, чем заменить, но поискать альтернативу можно. Либо пересмотреть логику кода.



PM   Вверх
t77
  Дата 13.7.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Amphiluke , спасибо за ваш ответ.
Проблема кроссброузерности кода и в использовании прототаипов и так вообщем...

Так выглядит список использования различных методов, объектов, свойств в различных броузерах:
Код

----------------------------------------------------------------------------------------------------------------------
 # |        IE                                    |    FIREFOX                                                |
----------------------------------------------------------------------------------------------------------------------
1  |loadXML                                         |parseFromString                                                 |
2  |selectSingleNode                                 |getElementsByTagName                                                                                                                                                                                                 |
3  |xml.documentElement                                 |var serializer = new XMLSerializer();
    |                                                |var xml = serializer.serializeToString(doc);                                                                 |
4  |xmlDom = new ActiveXObject("microsoft.xmlDom")  |xmlDom = document.implementation.createDocument("","",null)     |


Коментарии приветствуются.
Буду признателен всем кто поможет добавить в данный список дополнительные строки.

Добавлено через 4 минуты и 50 секунд
Мозила ругается на строку 52, в вышеприведенном коде:
Код

this.arrParams.push(pName, pValue);

Не могу понять, в чем дело...?? smile 
Что я делаю не так?

PM MAIL   Вверх
Amphiluke
Дата 13.7.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(t77 @  13.7.2010,  15:05 Найти цитируемый пост)
Мозила ругается на строку 52, в вышеприведенном коде:

А что пишет-то? У меня не ругается. smile

Добавлено через 2 минуты и 49 секунд
Цитата(t77 @  13.7.2010,  15:05 Найти цитируемый пост)
xml.documentElement

А не наоборот? smile
PM   Вверх
t77
  Дата 13.7.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Цитата(t77 @  13.7.2010,  15:05 ) 
Мозила ругается на строку 52, в вышеприведенном коде: 


А что пишет-то? У меня не ругается.


неизвестный объект arrParams
В отладчике смотрю, что у объекта this нет следующих переменных и объектов:
Код

this.action = strAction;          
this.urlLoc = urlLocation;     
this.arrParams = new Array();    
this.paramString = "";
this.resultXml = null;
this.xmlObj = xmlObject;
this.status = "";

Почему? Что я делаю не так?
Что за ерунда непонятная... 
PM MAIL   Вверх
t77
Дата 19.7.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Amphiluke, спасибо.
Вопрос решен, тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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