Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Многомерный массив как вывести данные на страничку (https://javascript.ru/forum/misc/20598-mnogomernyjj-massiv-kak-vyvesti-dannye-na-stranichku.html)

Sadist_dead 10.08.2011 19:12

Многомерный массив как вывести данные на страничку
 
Получаю данные с сервера (json)
в массив data вот такого вида

{"id":"2","Id_school":"350","id_class":"5v"Id_p":"Русский","date":"08\/20\/2011","nomer_yroka":"1"},


,{"id":"2","Id_school":"350","id_class":"5v"Id_p":"математика","date":"08\/20\/2011","nomer_yroka":"2"},

{"id":"2","Id_school":"350","id_class":"5v"Id_p":",Биология","date":"08\/20\/2011","nomer_yroka":"3"},




делаю цикл
for( var i in data ) {
        for( var k in data[ i ] ) {
            $( "#" + k ).append( data[ i ][ k ] );
}}

засовываю переменные на страничку в div элемент по id =Id_p
и в итоге у меня в id_p
падает
Русский
математика
Биология

как мне разграничить вывод, чтобы в три разных дива засовывались значения предметов
(id_p)

melky 10.08.2011 20:22

пиши селекторы через запятую
*!*$(..., ..., ...)*/!*.append( data[ i ][ k ] );

Sadist_dead 10.08.2011 20:25

Цитата:

Сообщение от melky (Сообщение 119591)
пиши селекторы через запятую
*!*$(..., ..., ...)*/!*.append( data[ i ][ k ] );

Селектор то у них один id_p
или я туплю
то есть для каждого аргумента сделать отдельный id и он туда будет по порядку выводить ?

melky 10.08.2011 20:35

неясно.


for( var i in data ) {
        for( var k in data[ i ] ) {
            $( "#" + k ).append( data[ i ][ k ] );
}}



этот цикл будет проходиться по всему массиву и по каждому элементу массива, т.е. по объекту. потом по каждому свойству объекта будет искаться элемент с таким ИД и туда будет вписываться значение текущего поля.

т.е. этот объект
{"id":"2","Id_school":"350","id_class":"5v", "Id_p":"Русский","date":"08\/20\/2011","nomer_yroka":"1"}

будет искать элемент с ИД "id" и вставлять в него "2", искать "Id_school" и вставлять туда "350".. искать "Id_p" и туда вставлять "Русский".

ясно, к чему я клоню? ошибка в написании кода.

Цитата:

Сообщение от Sadist_dead (Сообщение 119587)
засовываю на страничку в div элемент по id = Id_p
и в итоге у меня в id_p
падает
Русский
математика
Биология

так и будет.

Цитата:

как мне разграничить вывод, чтобы в три разных дива засовывались значения предметов
какие три разных дива ? ( html )

Sadist_dead 10.08.2011 20:56

Да ты правильно понял
 
я добился того что у меня в<div id="id_p"></div> падает три значения

Русский
математика
Биология

хорошо,

но я не могу понять как мне сделать правильно выборку из этого массива чтобы
в не выводить все значения в один id_p
а сделать
<div id="хз1" > <div> в этот див падало значение Русский
<div id="хз2" > <div> в этот див падало значение математика
<div id="хз3" > <div> в этот див падало значение биология

ну а совсем фетиш если бы у меня выбиралась если "nomer_yroka":"1" то вставить русский
в див 1
если "nomer_yroka":"2 то вставить математику в див 2"

{"id":"2","Id_school":"350","id_class":"5v"Id_p":"Русский","date":"08\/20\/2011","nomer_yroka":"1"},
 
 
,{"id":"2","Id_school":"350","id_class":"5v"Id_p":"математика","date":"08\/20\/2011","nomer_yroka":"2"},


вот такой страшный объект в первой его части "nomer_yroka":"1" значит в в div 1 надо вывести id_p этого предмета(русский)
во второй части "nomer_yroka":"2 значит в див 2 надо вывести id_p 'этой части и это будет математика" итд

Sadist_dead 10.08.2011 21:17

Есть мысль на то чтобы как то автоматически присваивать вытащенным id значения
встретилась один раз id_p1 второй раз
id_p2 итд. и в них уже выводить наши предметы

melky 10.08.2011 21:51

$.each(data, function(index,a){
        alert("Номер : "+ index+"\n\n Язык : "+ a[ "Id_p"]);       
});

Sadist_dead 10.08.2011 22:13

Спасибо это уже сильно радует
 
Цитата:

Сообщение от melky (Сообщение 119609)
$.each(data, function(index,a){
        alert("Номер : "+ index+"\n\n Язык : "+ a[ "Id_p"]);       
});

Подскажи пожалуйста какие id у моих дивов
0 1 2

melky 10.08.2011 22:15

Цитата:

Сообщение от Sadist_dead (Сообщение 119599)
<div id="хз0" > <div> в этот див падало значение Русский
<div id="хз1" > <div> в этот див падало значение математика
<div id="хз2" > <div> в этот див падало значение биология

$("#хз"+index )...

Sadist_dead 10.08.2011 22:36

Спасибо Огромное
 
success: function(data){
    for( var i in data ) {
        for( var k in data[ i ] ) {
            $( "#" + k ).append( data[ i ][ k ] );
			$.each(data, function(index,a){
    // index -> какой по счету объект в data, a -> data[ index ]
    for(var i in a ) {
        // i -> Id_p, a[ p ] -> qwerty
        if(i === "Id_p"){
			$("#id_p" + index).append(a[i]);
         //  alert("Номер : "+ index+"\n\n Язык : "+ a[i]);
            
        };
    };

все супер к этому иду уже две недели СПАСИБО ОГРОМНОЕ
есть только маленькая мелочь действительно все выводиться по дивом только в повторяется одно и тоже слово 100 раз

Sadist_dead 10.08.2011 22:54

что то с циклами перемудрил
 
что то с циклами перемудрил
:write:

Sadist_dead 11.08.2011 13:27

Все заработало Огромное Спасибо.!
 
Все заработало Огромное Спасибо.

Скажите пожалуйста а как в цикле очищать див если в нем есть значение?

devote 11.08.2011 13:31

$('#mydiv').empty();

Sadist_dead 11.08.2011 13:43

Спасибо помогло
 
Если вдруг интересно вот что получилось
$.ajax({
	type: "POST",
	url: "http://localhost/dnevnik/test.php",
	data: ({a:a,b:b}),
	dataType: 'json',
	beforesend: alert("Отправляемые данные  a=" +a+ "b="+b),
	success: function(data){
   
 
           
			$.each(data, function(index,a){
    // index -> какой по счету объект в data, a -> data[ index ]
    for(var i in a ) {
        // i -> Id_p, a[ p ] -> qwerty
        if(i === "Id_p"){
			$("#Id_p" + index).empty(a[i]);

			$("#Id_p" + index).append(a[i]);
			
			 if(i === "id_dz"){
			$("#Id_dz" + index).empty(a[i]);	 
			$("#id_dz" + index).append(a[i]);


из нашего массива date формируем индивидуальный id для каждого значения и выгружаем их в разные дивы :)))
Хреново только что очищает если данные приходят из php
а вот если не приходят то оставляет

devote 11.08.2011 14:10

complete: function() {
    // тут чисти если ничего не пришло
}
Но помни эта функция вызывается в любом случае, даже если что-то пришло или не пришло. Так что надо проверять.

Sadist_dead 11.08.2011 15:37

Подскажи пожалуйста где у меня тут ошибка ни как не пойму
 
Цитата:

Сообщение от devote (Сообщение 119765)
complete: function() {
    // тут чисти если ничего не пришло
}
Но помни эта функция вызывается в любом случае, даже если что-то пришло или не пришло. Так что надо проверять.

Есть скрипт все работает :

script type="text/javascript">
$(function(){
$("#datepicker").datepicker({
onSelect: function(dateText, inst) {
alert(dateText);

$("#datepicker").click(function(){


	var a = $("#datepicker").val();
	var b = <?php  echo $myrow['id_user']; ?>
	
$.ajax({
	type: "POST",
	url: "http://localhost/dnevnik/test.php",
	data: ({a:a,b:b}),
	dataType: 'json',
	beforesend: alert("Отправляемые данные  a=" +a+ "b="+b),
	

	success: function(data){
   
 
           
			$.each(data, function(index,a){
    // index -> какой по счету объект в data, a -> data[ index ]
    for(var i in a ) {
        // i -> Id_p, a[ p ] -> qwerty
        if(i === "Id_p"){
			$("#Id_p" + index).empty(a[i]);

			$("#Id_p" + index).append(a[i]);
		};
		if(i === "id_dz"){
			$("#id_dz" + index).empty(a[i]);	 
			$("#id_dz" + index).append(a[i]);
		};
		if(i === "ocenka"){
			$("#ocenka" + index).empty(a[i]);	 
			$("#ocenka" + index).append(a[i]);
		


		
         //  alert("Номер : "+ index+"\n\n Язык : "+ a[i]);
	
        
		 
    };
	};
});

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

script type="text/javascript">
$(function(){
$("#datepicker").datepicker({
onSelect: function(dateText, inst) {
alert(dateText);

$("#datepicker").click(function(){
complete: function() {
    // тут чисти если ничего не пришло
$("#Id_p0").empty();------------------вставил эту строчку и сразу все перестает работать
}


	var a = $("#datepicker").val();
	var b = <?php  echo $myrow['id_user']; ?>
	
$.ajax({
	type: "POST",
	url: "http://localhost/dnevnik/test.php",
	data: ({a:a,b:b}),
	dataType: 'json',
	beforesend: alert("Отправляемые данные  a=" +a+ "b="+b),
	

	success: function(data){
   
 
           
			$.each(data, function(index,a){
    // index -> какой по счету объект в data, a -> data[ index ]
    for(var i in a ) {
        // i -> Id_p, a[ p ] -> qwerty
        if(i === "Id_p"){
			$("#Id_p" + index).empty(a[i]);

			$("#Id_p" + index).append(a[i]);
		};
		if(i === "id_dz"){
			$("#id_dz" + index).empty(a[i]);	 
			$("#id_dz" + index).append(a[i]);
		};
		if(i === "ocenka"){
			$("#ocenka" + index).empty(a[i]);	 
			$("#ocenka" + index).append(a[i]);
		


		
         //  alert("Номер : "+ index+"\n\n Язык : "+ a[i]);
	
        
		 
    };
	};
});

devote 11.08.2011 15:41

ну ты смешной, встявлять ее надо не туда куда ты ее вставил:

$.ajax({
   ....
   ....
   success: function( data ) {
      ....
      ....
      ....
   },
   complete: function() {
      // выполниться после вызова success
   }
});

Sadist_dead 12.08.2011 14:54

Спасибо помогло
 
но вообщем я все ровно не смог сделать правильное условие

пришлось сделать так: У меня выборка по дате шла ( календарь ) я вообщем засунул календарь в див а на див повесил onclick поэтому у меня сначала все поля обнуляются а потом туда приходит из базы если если есть чему приходить. Это не слишком убого ?

function c() {
           $("#Id_p0").empty();
		    $("#Id_p1").empty();
			 $("#Id_p2").empty();
 $("#id_dz0").empty();
   $("#id_dz1").empty();
    $("#id_dz2").empty();
	  $("#ocenka0").empty();
	   $("#ocenka1").empty();
	    $("#ocenka2").empty();
	
  }

devote 12.08.2011 14:59

function c() {
   $("div[id^=Id_p], div[id^=id_dz], div[id^=ocenka]").empty();
}

melky 12.08.2011 15:08

Цитата:

Сообщение от devote (Сообщение 120037)
function c() {
   $("div[id^=Id_p]").empty();
   $("div[id^=id_dz]").empty();
   $("div[id^=ocenka]").empty();
}

тоже некрасиво.

можно так

function c() {
   $("div[id^=Id_p], div[id^=id_dz], div[id^=ocenka]").empty();
}


но это мне кажется медленным .. каждый раз будут браться все дивы и искаться именно те, у которых атрибут бла бла.

хотя.. кому какая разница? nobody cares

devote 12.08.2011 15:09

Цитата:

Сообщение от melky
можно так

поздно я сам раньше вспомнил =))))) Бошка если честно уже не варит что-то

melky 12.08.2011 15:18

если ли в jq что-то такое ??

$("div").filter("*!*[id^=Id_p||id_dz||=ocenka]*/!*").empty();


читать так : отобрать все div и отфильтровать те, у которых id начинается с Id_p, или id_dz, или ocenka.

было бы благородно.
вроде нету, да?

devote 12.08.2011 15:28

Цитата:

Сообщение от melky
если ли в jq что-то такое ??

неа, ничего подобного нет

Sadist_dead 12.08.2011 15:43

Наконец-то разобрался совсем что хотел.
Буду двигаться дальше .. А вам Огромное Спасибо!!! очень сильно мне помогли без вас еще бы месяц разбирался :)))

Sadist_dead 12.08.2011 18:11

Начал двигаться и вот тебе опять

взял скрипт Построение Графика

var myData = new Array(['Петя', 69.5], ['Вася', 2.8], ['Маша', 5.6], ['Саша', 2.8], ['Жопа', 14.6], ['Светлана', 2.7], ['Кирилл', 1.9]);
	var colors = ['#FA5E1F', '#FDCB3F', '#71D743', '#D23333', '#BAE73F', '#AB7B55', '#B381C9'];
	var myChart = new JSChart('graph', 'bar');
	myChart.setDataArray(myData);
	myChart.colorizeBars(colors);
	myChart.setTitle('Электронная система учета успеваемости');
	myChart.setTitleColor('#8E8E8E');
	myChart.setAxisNameX('ученик');
	myChart.setAxisNameY('%');
	myChart.setAxisColor('#c6c6c6');
	myChart.setAxisWidth(1);
	myChart.setAxisNameColor('#9a9a9a');
	myChart.setAxisValuesColor('#939393');
	myChart.setAxisPaddingTop(60);
	myChart.setAxisPaddingLeft(50);
	myChart.setAxisPaddingBottom(60);
	myChart.setTextPaddingBottom(20);
	myChart.setTextPaddingLeft(15);
	myChart.setTitleFontSize(11);
	myChart.setBarBorderWidth(0);
	myChart.setBarSpacingRatio(50);
	myChart.setBarValuesColor('#737373');
	myChart.setGrid(false);
	myChart.setSize(500, 321);
	myChart.setBackgroundImage('img/chart_bg.jpg');
	myChart.draw();

Все работает все хорошо
Естественно хочу засунуть вместо myData свой массив забираемый с сервера, но вот не задача скорее всего в том что я не правильно вставляю запрос....
Пока не меняю ни чего просто делаю ajax запрос но переменную data не подставляю, хочу чтобы просто выполнялся запрос и график был на странице, а он у меня пропадает из за какой то ошибки
<div id="graph">graph</div>

<script type="text/javascript" src="sources/jscharts.js"></script>




<script type="text/javascript">

$("#graph").click(function(){
	var a = $("#datepicker").val();
	var b = <?php  echo $myrow['id_user']; ?>
	
$.ajax({
type: "POST",
url: "http://localhost/dnevnik/test.php",
data: ({a:a,b:b}),
beforesend: alert("Отправляемые данные  a=" +a+ "b="+b),
success: function(data){alert(data);}

});

});

},complete: function() {
	var myData = new Array(['Петя', 69.5], ['Вася', 2.8], ['Маша', 5.6], ['Саша', 2.8], ['Жопа', 14.6], ['Светлана', 2.7], ['Кирилл', 1.9]);
	var colors = ['#FA5E1F', '#FDCB3F', '#71D743', '#D23333', '#BAE73F', '#AB7B55', '#B381C9'];
	var myChart = new JSChart('graph', 'bar');
	myChart.setDataArray(myData);
	myChart.colorizeBars(colors);
	myChart.setTitle('Электронная система учета успеваемости');
	myChart.setTitleColor('#8E8E8E');
	myChart.setAxisNameX('ученик');
	myChart.setAxisNameY('%');
	myChart.setAxisColor('#c6c6c6');
	myChart.setAxisWidth(1);
	myChart.setAxisNameColor('#9a9a9a');
	myChart.setAxisValuesColor('#939393');
	myChart.setAxisPaddingTop(60);
	myChart.setAxisPaddingLeft(50);
	myChart.setAxisPaddingBottom(60);
	myChart.setTextPaddingBottom(20);
	myChart.setTextPaddingLeft(15);
	myChart.setTitleFontSize(11);
	myChart.setBarBorderWidth(0);
	myChart.setBarSpacingRatio(50);
	myChart.setBarValuesColor('#737373');
	myChart.setGrid(false);
	myChart.setSize(500, 321);
	myChart.setBackgroundImage('img/chart_bg.jpg');
	myChart.draw();

}
});
});

Sadist_dead 12.08.2011 18:12

дубль


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