Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5

Передача объекта через функцию

09.11.2016, 23:31. Показов 2846. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! С сервера PHP я получаю json в следующем виде:
JSON
1
{"places":[{"name":"Евроопт","description":"Классный магазин","type":"Магазин","coordinateX":"53.66050975","coordinateY":"23.781520779237","adress":"Адрес!!!!!"},{"name":"Аптека номер 3","description":"Полезная аптека","type":"Аптека","coordinateX":"53.6619716","coordinateY":"23.7820238","adress":"Folush"},{"name":"Клуб База","description":"Популярное место города","type":"Клуб","coordinateX":"53.6542265","coordinateY":"23.8300179","adress":"улица Победы"}]}
На stackoverflow пишут, что полученный json - это объект js, то есть парсить не надо.

Я передаю данный объект в функцию, а затем вызываю.
Передача:
JavaScript
1
selectBoxFactory.setTypes(response);
Получение и присваивание:
JavaScript
1
2
3
4
5
6
7
8
9
  var select = {};
 
  var setTypes = function (getdata) {
    select = getdata;
  };
 
  var getTypes = function () {
    return select;
  };
Вызов:
JavaScript
1
selectBoxFactory.getTypes()
Как правильно передать объект, чтобы в response и select данные были одинаковыми ?
Помогите пожалуйста

P.S. Пишу на angular, но в данном случае - неважно, потому что косяк с передачей и присваиванием.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2016, 23:31
Ответы с готовыми решениями:

Передача объекта в анонимную функцию
function two(obj) { if (obj.property) obj.property({ d: 'true' }); } function one() { two({ ...

Передача JSON объекта в функцию
Добрый день, есть JSON объект с иерархическими данными. Я хочу найти один из внутренних объектов по id. Делаю это так: var...

Передача параметров объекта в функцию события
Доброго времени суток, уважаемые гуру! Вопрос в следующем. Например у меня есть на форме 3 элемента - список - чекбокс - текстбокс...

13
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
09.11.2016, 23:58
Цитата Сообщение от Resume Посмотреть сообщение
На stackoverflow пишут, что полученный json - это объект js, то есть парсить не надо.
Насколько мне известно, js не переводит строку ответа в объект, даже если та представляет из себя валидный json. Вашу строку необходимо предварительно перевести в объект с помощью JSON.parse()
JavaScript
1
selectBoxFactory.setTypes(JSON.parse(response));
Могу ошибаться...
1
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:07  [ТС]
Ошибка:


Вот объект: Object {places: Array[3]}
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
10.11.2016, 00:15
В таком случае вам правильно подсказали и ошибок я не вижу

Добавлено через 3 минуты
JavaScript
1
2
3
4
5
6
7
8
9
10
11
var select = {};
 
  var setTypes = function (getdata) {
    select = getdata;
    console.log(select);
  };
 
  var getTypes = function () {
    console.log(select);
    return select;
  };
Результаты в студию
1
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:16  [ТС]
На stackoverflow прочитал. Но у меня по-прежнему пустота приходит. Первая строка в консоли - Object {}. Это то, что я получаю после передачи объекта через функцию.

Где-то тут косяк, но не могу понять где:
JavaScript
1
2
3
4
5
6
7
8
9
var select = {};
 
  var setTypes = function (getdata) {
    select = getdata;
  };
 
  var getTypes = function () {
    return select;
  };
0
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:20  [ТС]

32 - это getTypes
17 - это setTypes
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
10.11.2016, 00:22
Попробуйте response в консоль вывести перед передачей в функцию. Просто тут косяка никакого в принципе быть не может

Добавлено через 1 минуту
Эмм...вы сначала получаете значение select, а потом его устанавливаете? Само собой оно изначально пустое. Почему у вас getTypes отрабатывает раньше setTypes? Это ведь бессмыслица
1
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:22  [ТС]
Делал я это не раз

17 - строка - до передачи
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
10.11.2016, 00:25
Напишите код вашего запроса на получение этого json'а с сервера. У меня подозрение, что вы вызываете getTypes() до того, как завершится асинхронный setTypes()
0
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:26  [ТС]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
    type: "POST",
    dataType: "json",
    url: "../../server.php",
    success: function(response) {
      console.log(response);
      selectBoxFactory.setTypes(response);
    },
    error: function (status) {
      console.log(status);
    }
  });
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
10.11.2016, 00:34
Лучший ответ Сообщение было отмечено Resume как решение

Решение

Ну вот и косяк. У вас наверняка следом за этим кодом следует getTypes(). Дело в том, что ajax-запросы асинхронны. То есть код продолжает исполняться дальше, даже если ответ от сервера еще не получен. Таким образом у вас получается, что getTypes() вызывается раньше setTypes(), несмотря на то, что первая функция стоит дальше в коде

Добавлено через 2 минуты
Вам следует сделать что-то вроде такого:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.ajax({
    type: "POST",
    dataType: "json",
    url: "../../server.php",
    success: function(response) {
      console.log(response);
      selectBoxFactory.setTypes(response);
      continueProgram();
    },
    error: function (status) {
      console.log(status);
    }
  });
function continueProgram() {
   // Продолжаем исполнение программы здесь только после ответа от сервера.
}
Либо читать о Promise

Добавлено через 3 минуты
Либо так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type: "POST",
    async: false,
    dataType: "json",
    url: "../../server.php",
    success: function(response) {
      console.log(response);
      selectBoxFactory.setTypes(response);
    },
    error: function (status) {
      console.log(status);
    }
  });
Но делать так я бы не советовал

Добавлено через 51 секунду
Потому что на время исполнения запроса страница в браузере замрет
1
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 00:59  [ТС]
Не помогает. У меня код с передачей и запросом находится в одном файле, а ниже код в другом файле:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
var select = {};
 
  var setTypes = function (getdata) {
    select = getdata;
    console.log(select);
  };
 
  var getTypes = function () {
    console.log(select);
    return select;
  };
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
10.11.2016, 01:10
Цитата Сообщение от Resume Посмотреть сообщение
У меня код с передачей и запросом находится в одном файле, а ниже код в другом файле
А что это меняет? Все равно весь js код из всех файлов собирается в один.

Добавлено через 1 минуту
Вы можете выложить код полностью? Потому что косяк найден. Исправить его применительно конкретно к вашему случаю можно только с полным исходным кодом
1
 Аватар для Resume
143 / 133 / 69
Регистрация: 08.11.2013
Сообщений: 767
Записей в блоге: 5
10.11.2016, 01:21  [ТС]
Уже не нужно выкидывать код, потому что решил проблему.
Я добавил еще один ajax-запрос в другой контроллер, в который пытался передать объект через функцию, и у меня теперь select заполняется, как и требовалось.
Вам спасибо большое, что подсказали, в чем ошибка, иначе бы ковырялся дальше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2016, 01:21
Помогаю со студенческими работами здесь

Передача объекта в функцию
Здравствуйте. Вопрос от новичка. Есть <a> ссылка</a> по клику на ссылку висит функция onclick, как в неё передать объекта ссылки, по...

передача данных текущего элемента в функцию через атрибут onclick
Здравствуйте, есть ссылка: <a href="#" onclick="mufunk(1);" >передать</a> И функция function mufunk(id){ var...

Передача объекта в функцию или функцию друга
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include <iostream> using namespace std; class My_Class1 { ...

Передача объекта в функцию
Нужно передать в функцию void Openz(Array &a) { int**buff = a.getarr(); for (int i(0); i < 10; i++) { for (int j(0);...

Передача объекта в функцию
Здравствуйте! Пишу "Сапёр", да никак не могу дописать, самые большие трудности возникли сейчас. Нужно создать таблицу рекордов. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru