Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][JavaScript]JSON odczyt danych
matti9410
post 8.11.2018, 09:33:03
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 10.07.2013

Ostrzeżenie: (0%)
-----


Witam,

Posiadam taki oto obiekt JSON

Kod
{
"2018-10-18":{
    "id":["1","2"],
    "id_sensor":["1","1"],
    "lat":["17.8267013",
    "17.8267013"],
    "lng":["51.700327",
    "51.700327"],
    "PM1":["11","11"],
    "PM2_5":["10","10"],
    "PM10":["1","1"],
    "temperature":["45","45"],
    "pressure":["1188","1188"],
    "date":["2018-10-18","2018-10-18"],
    "time":["11:00:00","11:00:00"]
},
"2018-11-04":{
    "id":["3","4"],
    "id_sensor":["1","1"],
    "lat":["17.8267013",
    "17.8267013"],
    "lng":["51.700327","51.700327"],
    "PM1":["11","11"],
    "PM2_5":["10","10"],
    "PM10":["1","1"],
    "temperature":["45","45"],
    "pressure":["1188","1188"],
    "date":["2018-11-04","2018-11-04"],
    "time":["11:00:00","11:00:00"]
}}


Problem polega na tym że chciałbym odczytywać dane tak jak z tablicy (po indeksach) ponieważ nie znam zwracanych dat.
Wszystko działa w następujący sposób.
Poprzez JS wysyłam zapytanie do pliku PHP który odczytuje dane z bazy i sortuje je tak jak widać powyżej, następnie odebrane dane chce wyświetlać krok po kroku według daty w pętli za pomocą JS.
Odczyt w standardowy sposób np."Data[2018-11-04].lng[i]" nie jestem wstanie zrobić ponieważ nie znam dat jakie zwrócił serwer.

W jaki sposób mogę ten obiekt zamienić na tablice ?
Go to the top of the page
+Quote Post
nospor
post 8.11.2018, 10:00:11
Post #2





Grupa: Moderatorzy
Postów: 34 263
Pomógł: 5678
Dołączył: 27.12.2004




W js po obiektach iteruje sie np. przy pomocy FOR - patrz dokumentacja js


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
matti9410
post 8.11.2018, 13:00:04
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 10.07.2013

Ostrzeżenie: (0%)
-----


Wykombinowałem sobie kod który przepisuje mi dane do tablicy
Kod
function get_story_data(){
        var day = [2];
        var data_table = [3];
        
        var begin_day = document.getElementById("date-begin-input").value;
        var end_day = document.getElementById("date-end-input").value;
        
    
        var url_data = "../api/get_story_data.php?begin_day=" + begin_day + "&end_day=" + end_day;
        
        $.ajax({
            url: url_data,
            complete: function (response) {
                
                var Data = [];
                var DataString = response.responseText;
                
                Data = JSON.parse(DataString);

                var name_day = Object.keys(Data);
                
                for (var i = 0; i < name_day.length; i++) {
                    for (let x=0; x<Data[name_day[i]].id.length; x++) {
                        var lng = Data[name_day[i]].lng[x];
                        var lat = Data[name_day[i]].lat[x];
                        var pm10 = Data[name_day[i]].PM10[x];
                        data_table[x] = [lng, lat, pm10];
                    }
                    day[i] = [name_day[i], data_table];
                }
                
            },
            
            error: function () {
                alert("blad");
            },
            
            timeout: 4000
        });
        
        return day;

    }
    
    day = get_story_data();


i teraz gdy odwołuje się do danego miejsca w tablicy żeby odczytać np date "day[0][0]" otrzymuje Undefined gdzie powinna być data, co robię źle ?



Go to the top of the page
+Quote Post
Pyton_000
post 8.11.2018, 14:28:50
Post #4





Grupa: Zarejestrowani
Postów: 7 559
Pomógł: 1328
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


console.table(day)

i zobacz co wypluje
Go to the top of the page
+Quote Post
matti9410
post 8.11.2018, 14:57:23
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 10.07.2013

Ostrzeżenie: (0%)
-----


Wyskakuje coś takiego




Ten post edytował matti9410 8.11.2018, 15:14:44
Go to the top of the page
+Quote Post
Pyton_000
post 8.11.2018, 15:26:21
Post #6





Grupa: Zarejestrowani
Postów: 7 559
Pomógł: 1328
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Czyli masz. Ale weź pod uwagę ajax wykonuje się asynchronicznie więc wykonanie funkcji `get_story_data()` zwróci Ci pustą tablicę (czy co tam masz na początku).

żeby dobrać się do danych z Ajax musisz to zrobić w complete tam gdzie mielisz te dane.
Go to the top of the page
+Quote Post
matti9410
post 9.11.2018, 09:27:01
Post #7





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 10.07.2013

Ostrzeżenie: (0%)
-----


W jaki sposób mogę zrobić opóźnienie reszty kodu dopóki nie dostane danych ? Nie wiem jak się za to zabrać.
Go to the top of the page
+Quote Post
Pyton_000
post 9.11.2018, 09:39:21
Post #8





Grupa: Zarejestrowani
Postów: 7 559
Pomógł: 1328
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie opóźniaj bo zamrażasz interfejs tym.

Napisz sobie po prostu funkcję którą odpalisz po udanym requeście w metodzie complete i tam ją odpal.
Go to the top of the page
+Quote Post
matti9410
post 9.11.2018, 10:12:09
Post #9





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 10.07.2013

Ostrzeżenie: (0%)
-----


Wielkie dzięki za pomoc smile.gif. Wszystko śmiga.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.11.2018 - 23:26