Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Ввод дополнительных свойств стандартным объектам


Автор: bronenos 8.12.2007, 12:43
В Opera, FF работает, в IE - нет
Код

try { var obj = new XMLHttpRequest(); }
catch (e) { var obj = new ActiveXObject("Msxml2.XMLHTTP"); }

obj.id = Math.round(Math.random() * 1000);
alert(obj.id);


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

Автор: Royan 8.12.2007, 13:23
http://forum.vingrad.ru/forum/topic-185270.html
Поэтому в вашем случае наиболее вероятным решением будет создать wrapper, а одному из его свойств присвоить объект httpRequest

Автор: bronenos 8.12.2007, 14:41
и чего я этим добьюсь...

Автор: Royan 8.12.2007, 15:21
Цитата(bronenos @  8.12.2007,  11:41 Найти цитируемый пост)
и чего я этим добьюсь...

Решите свою проблему smile

Если у вас есть какой-то уточняющий вопрос или вам что-то не ясно, пожалуйста, спрашивайте.

Автор: bronenos 8.12.2007, 15:42
Я делаю асинхронные запросы, и чтобы не путать обработчики ответовс запросами, я присваиваюидентификаторы...
Если я делаю запрос на php то он передает id обратно, в ответе. Но если делаю запрос на текстовый файл, то единственная мысль - хранить id в самом объекте в виде свойства... но мое желание пресек IE... очень обидно...

Автор: Royan 8.12.2007, 17:19
bronenos, из сказанного вами я не совсем понял зачем вам, собственно, различать запросы в js коде, из-за чего у меня возникает сразу несколько вариантов ответа на ваш вопрос, но быть может, если вы опишите вашу задачу в общем, то будет легче найти самый оптимальный способ ее решения.

Автор: bronenos 8.12.2007, 19:08
Я пользую свою библиотеку, которая сохраняет в глобальном массиве под ключом=id значение=объект
объект включает в себя св-ва настроек, объект XMLHttpRequest и функцию-обработчик ответа сервера (есть два обработчика - первый проверяет, завершен ли запрос и вызывает второй, пользовательский).
Все было хорошо, пока я делал связку js + php, php возвращал id, который я передавал get параметром

но потом в состав библы вошел метод подключения js файла, и тут уже надо бы иметь возможность получать id объекта, который завершил запрос.. и единственное, что приходит на ум - это использование доп. св-ва (id), который не держит IE..
далее ступор...

Добавлено через 2 минуты и 23 секунды
(предложения по отказу от первого обработчика и/или подключения файла - не подходят)

Автор: vasac 8.12.2007, 22:58
Код

/* Запрос с заданным id */
function request(id)
{
  if (window.XMLHttpRequest) {var request = new XMLHttpRequest();} else { /* IE */}
//  ...
  request.onreadystatechange = (
    function()
    {
    // Функция обработки результата, в которой доступна переменная id
    }
  );
}

Автор: bronenos 9.12.2007, 00:16
Сходство имени переменной и имени функции - это специально?
Если нет, то объясните, плз, механизм работы этого синтаксиса
Если да, то такой способ не подойдет, ибо, как я уже говорил, у меня двойная обработка, тобишь onreadystatechang'ем тут не обойтись одним

Добавлено через 6 минут и 47 секунд
А если я присвою в объекте (ассоц. массиве) значение ключу-объекту, и далее изменю свойство объекта, то потом обратившись по нему как по ключу я получу то значение, к которому его сопоставил?
я мог бы и попробовать, да уже нет времени, а может здесь кто-то ответит сразу...

Добавлено через 8 минут и 59 секунд
вопрос состоит в том, меняется ли для js-интерпретатора объект в целом если меняется хотя бы одно его св-во..

Автор: Royan 9.12.2007, 02:23
bronenos, Думаю вы не будете спорить, что у вас все очень хитро реализовано, например что имеется ввиду под "метод подключения js файла"? 


Цитата(bronenos @  8.12.2007,  21:16 Найти цитируемый пост)
вопрос состоит в том, меняется ли для js-интерпретатора объект в целом если меняется хотя бы одно его св-во..

Объект в JS это ссылка. Поэтому независимо от того какие свойства вы там поменяли ссылка не измениться и будет ссылаться на все тот же объект. На самом деле ваш вопрос несколько некорректен, потому что хэш, если таковым вообще оперирует JS интерпретатор, должен почти наверняка вычисляться в момент конструирования объекта на основе внутреннего адреса объекта в памяти. В ином случае его бы приходилось вычислять каждый раз при изменении состояния объекта, а это бессмысленно ибо ведет к катастрофическим последствиям

А вообще в отношении того как организовать взаимосвязь между сервером и браузером то можно воспользоваться cookies, хотя есть вероятность что они будут отключены, но во-первых это можно проверить и предупредить пользователя, а во-вторых этой вероятностью можно пренебречь.


Не знаю чем еще вам помочь, все равно до конца не ясны корни вашей проблемы. Почему именно так должна работать ваша библиотека? Мало информации...

Автор: bronenos 9.12.2007, 09:41
Метод полдключения?
Код

$.include("preview.js");


А так должна потому что в функцию обработки потом передается чисто текст ответа, ибо в 97% запросах пользователи рабоют только с readyState=4.
Сейчас проверю насчет объектов..

Автор: bronenos 9.12.2007, 10:04
Хотя, в принципе, наверное откажусь от этой хни - и оставлю только библа + php
ибо кому надо подружать данные - 90% делают запрос к php файлу, а не простому текстовику...
Спасибо за оказанное внимание...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)