Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   из Mysql в JSON (https://javascript.ru/forum/server/47158-iz-mysql-v-json.html)

doitden 11.05.2014 15:53

из Mysql в JSON
 
Добрый день.

недавно начал разбираться с JS и PHP, так что возможны неточности в описании моих действий:)

Помогите с таким вопросом.
Из mysql при помощи php (файл getjson.php) функции json_encode() формирую JSON объекты.
...
$var = array();
$sql = "SELECT * FROM planer";

$result = mysqli_query($con, $sql);

while($obj = mysqli_fetch_object($result)) {
    $var[] = $obj;
}
echo '{"planer":'.json_encode($var).'}'; //формируем объекы

...


Далее в используя Jquery преобразую JSON в js объекты и вывожу в виде таблицы.

var url="getjson.php";
        $("#jsondata tbody").html("");
        $.getJSON(url, function (data) {

               $.each(data.planer, function (i, planer) {
                // console.log(planer);
                var newRow =
                    "<tr>"
                        + "<td class='td_id'>" + planer.idPlaner + "</td>"
                        + "<td class='td_date'>" + planer.DatePlaner + "</td>"
                        + "<td class='td_time'>" + planer.TimePlaner + "</td>"
                        + "</tr>";
                $(newRow).appendTo("#jsondata tbody");
            });
        });


Скрипт работает хорошо. Но т.к объекты js перебираются в анонимных функциях не получается сохранить преобразованные объекты отдельно. Хочу я это сделать к примеру для фильтрации результата запроса уже на клиенте, без обращения к серверу.

подскажите как это лучше всего сделать?

danik.js 11.05.2014 17:16

Вариант 1: Очистить таблицу, отсортировать данные, заново отрендерить таблицу.
Вариант 2: При рендеринге создавать хэш-таблицу (первичный ключ) : (DOM-элемент строки). Сортируем данные. Далее проходимся по отсортированному массиву и расставляем строки таблицы на новые позиции (в получении строк нам поможет созданная хэш-таблица.

SindBad 26.05.2014 14:59

doitden,
оберните весь код в единую область видимости:
(function(){
  var JSONdata; //объявляем глобальный объект данных
  var url="getjson.php";
 	$("#jsondata tbody").html("");
	$.getJSON(url, function (data) {
		JSONdata = data.planer; //заполняем объект
		   $.each(data.planer, function (i, planer) {
			// console.log(planer);
			var newRow =
				"<tr>"
					+ "<td class='td_id'>" + planer.idPlaner + "</td>"
					+ "<td class='td_date'>" + planer.DatePlaner + "</td>"
					+ "<td class='td_time'>" + planer.TimePlaner + "</td>"
					+ "</tr>";
			$(newRow).appendTo("#jsondata tbody");
		});
	});

})();

теперь getJSON можно вызвать только раз, если JSONdata пуст.


Часовой пояс GMT +3, время: 07:42.