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 :: область видимости jquery post

 PHP.SU

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


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

> Описание: область видимости jquery post
Tyoma5891
Отправлено: 13 Августа, 2015 - 17:48:28
Post Id


Частый посетитель


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


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




всем привет вообщем есть такой участок кода:
CODE (javascript):
скопировать код в буфер обмена
  1. var arrPartners;
  2.                         $.post('urlica.php?getarr&id='+editId,function(data){
  3.                        
  4.          arrPartners = data;
  5.        
  6.                         });
  7.                         alert(arrPartners);

вопрос почему выводится undefined и как мне собственно получить в переменной arrPartners данные полученные от сервера после поста?
 
 Top
DelphinPRO
Отправлено: 13 Августа, 2015 - 18:05:11
Post Id



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


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


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




Tyoma5891 пишет:
вопрос почему выводится undefined

Потому что отправляется пост-запрос, и не дожидаясь его окончания код продолжает выполнятся. Т.е. когда вызывается алерт, post-запрос еще не завершен, и 4-я строка вашего кода еще не выполнена.
Потому и undefined.
Tyoma5891 пишет:
как мне собственно получить в переменной arrPartners данные полученные от сервера после поста?

Как раз для этого и есть коллбэк параметр функции $.post(), который выполняется в аккурат после окончания запроса.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Deonis
Отправлено: 13 Августа, 2015 - 22:33:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Кроме callback-функций, в JS есть такое понятие, как "Общания" (Promise), а в jQuery объект $.Deferred и его методы. Как их можно использовать, можете глянуть тут
 
 Top
Tyoma5891
Отправлено: 14 Августа, 2015 - 10:49:13
Post Id


Частый посетитель


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


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




а кто может объяснить в чем разница есть массив без ключей преобразовую его в ясон json_encode на выходе получаю строку вида ["vasya","petya"] потом в тот же массив добавляю ключи опять преобразую в ясон и получаю строку но уже другого вида с фигурными скобками "{"22":"vasya","440":"petya"} так проблема вся в том что второй вариант при передачи в jquery не воспринимается как массив а пишет object Object, пытался преобразовать его в массив не помагает, а этот вариант ["vasya","petya"] работает без проблем
 
 Top
Sail
Отправлено: 14 Августа, 2015 - 11:21:47
Post Id



Участник


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


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




Tyoma5891, Вам, однако, сюда: Про массивы, в учебнике
Спойлер (Отобразить)
 
 Top
Deonis
Отправлено: 14 Августа, 2015 - 11:27:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




PHP не делает различий между ассоциативными и индексированными массивами, поэтому это всё "массивы" и синтаксис работы с ними ничем не отличается. А в JS и ассоциативные, и индексированные массивы - это "объекты", но отличия есть:
CODE (javascript):
скопировать код в буфер обмена
  1. var arr = [];
  2. console.log( typeof arr ); // object
  3. var obj = {};
  4. console.log( typeof obj ); // object
  5. // НО!
  6. console.log( Array.isArray( arr ) ); // true
  7. console.log( Array.isArray( obj ) ); // false

Если при работе с индексированными массивами, обращаться к элементам массива нужно через квадратные скобки, указывая в них индекс (arr[0]), то при работе с объектами (ассоциативными массивами), в большинстве случаев, обращаются к элементам массива через точку, указывая имя ключа:
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = {
  2.     a: 100,
  3.     b: 200
  4. };
  5. console.log( obj.b ); // 200

Исключениями являются случаи, как у вас, когда ключи числовые и случаи, когда имя ключа берется из переменной. Тогда мы обращаемся к элементу так же, как и в случае с индексированными массивами, т.е. через квадратные скобки:
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = {
  2.     22 : 'vasya',
  3.     440: 'petya'
  4. };
  5. console.log( obj[22] ); // vasya

Обрабатывать объект, как у вас, можно таким образом:
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = {
  2.     22 : 'vasya',
  3.     440: 'petya'
  4. };
  5. for(var i in obj) {
  6.     console.log( obj[i] ); // "vasya" при первой итерации и "petya" - при второй
  7. }

(Отредактировано автором: 14 Августа, 2015 - 11:29:24)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB