0 Пользователей и 1 Гость просматривают эту тему.
  • 24 Ответов
  • 3469 Просмотров
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В модуле получаю массив записей из запроса, 3 поля, значения которых мне надо передать в виде массива в jq-скрипт для дальнейшего использования во фронте (работа с я.картами).
1. Как мне сформировать такой массив?
2. Как его потом в скрипте считывать?
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #1 : 23.11.2014, 20:51:04 »
1. запиши в строку в:
а) кукисы
б) на страницу как класс или прям в тело документа
2. получи строку в js и разбей.

Пример из справочника js:
Код: javascript
var tags = "Лето, зима, осень 2009 года"
var re = /\s*,\s*/
var tagList = tags.split(re);
alert(tagList) //  ["Лето", "зима", "осень 2009 года"]

Пример попроще, без регулярки:
Код: javascript
arr = "a,b,c".split(',')  // массив ["a", "b", "c"]
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #2 : 23.11.2014, 20:57:22 »
Не, кукисы - это зло, я в этом уже убедился.
Нашел примерчик:
Код: php
$doc->addScriptDeclaration('var arr='.json_encode($arr).';');
В результате получаю в скрипте json-строку, как с ней работать?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #3 : 23.11.2014, 21:04:34 »
Хотя пока не понял, как в массив записать данные из запроса...
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Передать массив записей из БД в js
« Ответ #4 : 23.11.2014, 21:09:19 »
AlekVolsk То что ты нашел, также не совсем правильно. Не зачем засорять HTML разметку ненужными данными.
Лучше делать отдельный запрос за данными этого массива. $.ajax, $.getJSON , будут в помощь.
Тем самым ту ускоришь ренедеринг страницы и скорость ее загрузки
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #5 : 23.11.2014, 21:10:20 »
Ну так можно в строку, можно в json, тут дело вкуса. Если юзаешь JQ, то так:

Код: javascript
var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );

Так же можно просто преобразовать объект в массив, всё гуглится.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #6 : 23.11.2014, 21:11:05 »
Fedor Vlasenko, если у него там пять слов надо передать, рационально ли отдельный запрос делать?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #7 : 23.11.2014, 21:16:22 »
Сколько слов - хз, надо точки на карте поставить и к каждой точке подсказку вывести.
Точек может быть и 5, а может и несколько тысяч.
Формирую и передаю так (не проверял, модуль еще не установлен):
Код: php
$items = ModAimapsHelper::getItems((bool)$params->get('is_partner'));
$arr = array();
$i = 0;
foreach ($items as $item) {
  $val1 = $item->fadr;
  $val2 = !empty($item->furl)? $item->name.'<br>'.$item->furl : $item->name;
  $subarr = arra($val1,$val2);
  $arr[$i] = $subarr;
  $i++;
}
$doc->addScriptDeclaration('var arr='.json_encode($arr).';');
Не знаю, насколько это правильно.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Передать массив записей из БД в js
« Ответ #8 : 23.11.2014, 21:17:30 »
5 слов можно и в разметку прописать
Код: html4strict
<span data-arr="a1,a2,a3,a4,a5"></span>
а вот если больше
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #9 : 23.11.2014, 21:22:09 »
Цитировать
Лучше делать отдельный запрос за данными этого массива
В модуле только этот запрос и делается...

Не совсем понятно, как использовать AJAX без формы, ибо во вьюхе модуля только:
Код: html4strict
<div class="ymap"></div>
и все
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #10 : 23.11.2014, 21:23:47 »
Как же, делал такую же задачу. Я координаты прописывал придуманным атрибутом к тэгу, ибо html5 же. Типа
Код: html4strict
<span class="geopoint" coords="255.22, 789,789">Это Спарта!</span>
А, ну Фёдор выше тоже в атрибут же записал. В общем, тут наши мнения сходятся.  ^-^
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #11 : 23.11.2014, 21:26:25 »
В модуле только этот запрос и делается...
Не совсем понятно, как использовать AJAX без формы, ибо во вьюхе модуля только:
Код: html4strict
<div class="ymap"></div>
и все
Лёш, тебе тут AJAX не нужен.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Передать массив записей из БД в js
« Ответ #12 : 23.11.2014, 21:29:28 »
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/ajax-v-joomla-3-2
Не путай запросы MySQL и Js AJAX
При большом количестве данных лучше сделать AJAX запрос.
Тем самым мы отделим HTML разметку от данных
А еще потом добавишь к примеру фильтр выбора в города или района
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #13 : 23.11.2014, 21:45:17 »
Я не путаю. Но com_ajax появился только в третьей линейке (какая в ТС — хз) и его применение к настоящей задаче нерационально.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #14 : 23.11.2014, 21:50:08 »
Доступ к аяксу есть, J3.last
Не совсем понятно, как делать через AJAX запросы в модулях.
Код: javascript
    $.ajax({
      type: 'POST',
      cache: false,
      dataType: 'html',
      url: $('#order-subscription').attr('action'),
      data: // как передать параметры для запроса, если во вьюхе не используется форма? $(form).serializeArray() явно не прокатит (
      success: function() {
        // КАК ТУТ ПОЛУЧИТЬ ДАННЫЕ? хз
      }
    });
В связи с вышеизложенным решение на аяксе пока отложу, но вернусь обязательно (не первый раз этот вопрос встает).

Вопрос: значения поле содержат запятые (почтовый адрес, по которому точку на карте еще надо найти ((( ), как их экранировать перед отправкой в json_encode() (если это вообще надо)?
И как такой массив (без ключей) считывать в js? с этим разобрался
« Последнее редактирование: 23.11.2014, 21:54:40 от AlekVolsk »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Передать массив записей из БД в js
« Ответ #15 : 23.11.2014, 22:00:51 »
Запятые не обязательно экранировать при сериализации в json. Вот если содержимое HTML сериализовать в json то головная боль обеспечена) А зачем вобще в json заворачивать если там просто данные через запятую как я понял?

С кавычками одинарными/двойными проблемы могут возникнуть,  c кодировкой..
« Последнее редактирование: 23.11.2014, 22:06:18 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Передать массив записей из БД в js
« Ответ #16 : 23.11.2014, 22:01:19 »
Женя не тебе писал про запросы, а AlekVolsk
Код: javascript
$.ajax({
      type: 'POST',
      cache: false,
      dataType: 'json',
      url: $('#order-subscription').attr('action'),
      success: function($res) {
        console.dir($res);
      }
});
Цитировать
И как такой массив (без ключей) считывать в js
http://api.jquery.com/jquery.each/
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #17 : 23.11.2014, 22:16:42 »
Вот пример аналогичной задачи, верстал гдет полгода назад:

Код: html4strict
<h2>Информация по&nbsp;дому</h2>
<dl>
<dt>Этажность:</dt> <dd>9</dd>
<dt>Материал стен:</dt> <dd>кирпич</dd>
<dt>Адрес:</dt> <dd class="coords" coords="52.54,85.22">ул.&nbsp;Ударная, 92</dd>
</dl>
<div class="itemdescprice">
<div class="price">2&nbsp;000&nbsp;000&nbsp;р.</div>
<div class="button">Посмотреть</div>
</div>

Спойлер
[свернуть]
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #18 : 23.11.2014, 22:23:04 »
Ппц, карта не выводится
Код: javascript
var myMap;

ymaps.ready(init);

function init () {
  myMap = new ymaps.Map('ymap', {
    center:[65,100],
    zoom:3,
    controls:['zoomControl','typeSelector']
  });
}
В консоли:
TypeError: e is null combine.xml:642 (это грузится с апи яндекса)
Аналогичный код, но вызываемый из материала, работает на ура.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Передать массив записей из БД в js
« Ответ #19 : 23.11.2014, 22:25:21 »
А у тебя #ymap на странице вообще есть?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #20 : 23.11.2014, 22:26:39 »
Ппц, у меня класс вместо ID ))))))))))
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #21 : 23.11.2014, 23:09:14 »
Строю точки на карте:
Спойлер
[свернуть]
На всех точках подсказка от последней записи в массиве
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #22 : 24.11.2014, 00:50:13 »
Цикл на jq:
Код: javascript
  while (i<c) {
    var ai_adr = ai_users_points[i][0];

    ymaps.geocode(ai_adr, {results: 1}).then(function (res) {
      // ЗДЕСЬ НУЖНО ДОЖДАТЬСЯ ОКОНЧАНИЯ ВЫПОЛНЕНИЯ ymaps.geocode(), КАК?
    });

    i++;
  }
*

almika

  • Захожу иногда
  • 325
  • 27 / 0
Re: Передать массив записей из БД в js
« Ответ #23 : 24.11.2014, 05:40:06 »
На всех точках подсказка от последней записи в массиве
Так не надо, наверное, HintLayout = null перед добавлением метки на карту.
Код
HintLayout = null;
myMap.geoObjects.add(myPlacemark);
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Передать массив записей из БД в js
« Ответ #24 : 24.11.2014, 08:36:50 »
По теме топика вопрос решен, по карте отдельный создам. Всем спасибо.
Топик просьба не закрывать, к теме аякса еще вернусь, спс.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Передать логин и пароль параметром

Автор tmpnikl

Ответов: 3
Просмотров: 720
Последний ответ 01.11.2017, 13:27:29
от robert
[Решено] ассоциативный массив для передачи в JS

Автор larikan

Ответов: 4
Просмотров: 2303
Последний ответ 15.06.2017, 17:17:38
от larikan
Передать ссылку в скрипт

Автор denism300

Ответов: 3
Просмотров: 1063
Последний ответ 27.02.2016, 12:40:03
от Aleks.Denezh
Перебор записей с конца

Автор AlekVolsk

Ответов: 7
Просмотров: 907
Последний ответ 12.01.2015, 14:30:14
от AlekVolsk
Как передать параметры через get со страницы в скрипт на php?

Автор vaf

Ответов: 2
Просмотров: 1711
Последний ответ 16.09.2014, 16:08:25
от AlekVolsk