Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: return, без него, но с переменной и без всего!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
p1us
Отправлено: 19 Апреля, 2012 - 10:14:34
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); //  значение передается переменной (true / false)
  2.  
  3. или
  4.  
  5. return new ActiveXObject("Msxml2.XMLHTTP");  // значение передается функции самой (true / false)
  6.  
  7. или
  8.  
  9. new ActiveXObject("Msxml2.XMLHTTP");  
  10. //ошибка, в случае false?


получается, что 1 и 2 варианты они одинаковы? А 3 вариант ошибка, в случае false? Ниндзя

(Отредактировано автором: 19 Апреля, 2012 - 10:15:01)

 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 10:16:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я не понял в чем прикол. Может я еще не проснулся?
 
 Top
p1us
Отправлено: 19 Апреля, 2012 - 10:19:24
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
Я не понял в чем прикол. Может я еще не проснулся?


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

CODE (javascript):
скопировать код в буфер обмена
  1. function getXmlHttp(){
  2.   var xmlhttp;
  3.   try {
  4.     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  5.   } catch (e) {
  6.     try {
  7.       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  8.     } catch (E) {
  9.       xmlhttp = false;
  10.     }
  11.   }
  12.   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  13.     xmlhttp = new XMLHttpRequest();
  14.   }
  15.   return xmlhttp;
  16. }


CODE (javascript):
скопировать код в буфер обмена
  1.  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

заменяем на выражение с return и просто убираем xmlhttp =

(Отредактировано автором: 19 Апреля, 2012 - 10:20:31)

 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 10:28:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Оставьте как сейчас в примере кода, т.к. возможно понадобится несколько одновременных соединений.
А без имеющегося реализованного в примере замыкания все последующие указатели будут ссылками на один и тот же объект, что не приемлемо.
 
 Top
EuGen Администратор
Отправлено: 19 Апреля, 2012 - 10:29:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




p1us
В Вашем случае, судя по всему, xmlhttp сначала формируется, потому сразу возвратить его нельзя. При этом сам возврат (return) должен быть в любом случае - иначе функция ничего не вернет и вызвавшее ее выражение будет некорректным.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
p1us
Отправлено: 19 Апреля, 2012 - 10:33:26
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




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

правильно ли я понял, что если будет сразу несколько обращений, то при записи через переменную, мы получим 1 результат, а если же поставим return, то результатов будет столько же сколько соединений?
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 10:33:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen пишет:
сразу возвратить его нельзя
Можно, но не будет замыкания, т.к. xmlhttp приватная переменная.
(Добавление)
p1us пишет:
правильно ли я понял, что если будет сразу несколько обращений, то при записи через переменную, мы получим 1 результат
Вы поняли все наоборот.
 
 Top
p1us
Отправлено: 19 Апреля, 2012 - 10:36:19
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. function getXmlHttp(){
  2.     try {
  3.         return new ActiveXObject("Msxml2.XMLHTTP");
  4.     } catch (e) {
  5.         try {
  6.             return new ActiveXObject("Microsoft.XMLHTTP");
  7.         } catch (ee) {
  8.         }
  9.     }
  10.     if (typeof XMLHttpRequest!='undefined') {
  11.         return new XMLHttpRequest();
  12.     }
  13. }


а здесь получается мы обходимся вообще без переменных так как все значения проходят через саму функцию?
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 10:40:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Верните как было, с переменной. Это будет правильно. Почему? Я написал выше.
 
 Top
p1us
Отправлено: 19 Апреля, 2012 - 10:41:01
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




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


вы не могли бы пояснить про несколько соединений одновременно?
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 10:43:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А что тут сложного?
У вас же может быть несколько блоков параллельно обновляющихся на странице.
Это и есть несколько соединений.
Несколько независимых xmlhttp-объектов, а не куча ссылок на один объект.
 
 Top
p1us
Отправлено: 19 Апреля, 2012 - 10:47:50
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
А что тут сложного?
У вас же может быть несколько блоков параллельно обновляющихся на странице.
Это и есть несколько соединений.
Несколько независимых xmlhttp-объектов, а не куча ссылок на один объект.

спасибо, разобрался!

(Отредактировано автором: 19 Апреля, 2012 - 11:12:20)

 
 Top
IllusionMH
Отправлено: 19 Апреля, 2012 - 13:53:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Как-то много обсуждений, но не в ту степь.
В данном случае представлена функция возвращающая объект для HTTP(S) соединения (или майкрософтовский аналог в старых версиях) для создания AJAX соединений.
Пытаемся создать одну из версий ИЕшного объекта
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
если облом - создаем более старую (если не ошибся)
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
не прокатило, присваиваем false и используем стандартный объект http://www[dot]w3[dot]org/TR/XMLHttpRequest/
и возвращаем его (один объект - одно соединение)
Просто это написано когда-то давно, и тупо копипастиццо чтобы не писать каждый раз.

на вики вообще более изощренный вариант
CODE (javascript):
скопировать код в буфер обмена
  1. function createRequestObject() {
  2.   if (typeof XMLHttpRequest === 'undefined') {
  3.     XMLHttpRequest = function() {
  4.       try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
  5.         catch(e) {}
  6.       try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
  7.         catch(e) {}
  8.       try { return new ActiveXObject("Msxml2.XMLHTTP"); }
  9.         catch(e) {}
  10.       try { return new ActiveXObject("Microsoft.XMLHTTP"); }
  11.         catch(e) {}
  12.       throw new Error("This browser does not support XMLHttpRequest.");
  13.     };
  14.   }
  15.   return new XMLHttpRequest();
  16. }

return можно писать сразу, т.к. исключение будет выброшено еще при попытке создать объект.

Правда тут изначально проверяется наличие XMLHttpRequest
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2012 - 14:11:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




IllusionMH, какой результат будет на глаз без проверки:
CODE (javascript):
скопировать код в буфер обмена
  1. function create(number) {
  2.   var arr = [];
  3.   for (var i = 1; i < number; i++) {
  4.     arr[i] = function() {
  5.       alert(i * i)
  6.     };
  7.   }
  8.   return arr;
  9. }
  10.  
  11. var a = create(20);
  12. a[14](); // что выведет алерт?
  13.  
 
 Top
IllusionMH
Отправлено: 19 Апреля, 2012 - 14:25:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




DeepVarvar, 20 )
Тут дело не в замыкании, просто кроссбраузерный вариант создания этого объекта Улыбка
(Добавление)
Тьфу блин, затупил. i=20 а результат 400

(Добавление)
В любом случае каждое выполнение этой функции будет возвращать новый объект. При этом без разницы, return в каждой строчке, или есть переменная
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB