Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    lettura da javascript di un oggetto personalizzato creato con php

    Ciao a tutti,
    con php genero tre array (obj1, obj2, obj3) e li codifico in json con json_encode ottenendo un unico oggetto di questa forma

    {
    "obj1":[{"id":"1","titolo":"titolo1","dal":"2021-10-20","al":"2022-12-10"}],
    "obj2":[{"id":"1","testo":"testo1..."},{"id":"2","testo":" testo2..."},{"id":"3","testo":"testo3..."}],
    "obj3":[{"success":1}]
    }

    in questo esempio
    obj1 contiene un solo elemento,
    obj2 ne contiene 3,
    obj3 ne contiene 1

    ritorno l'oggetto alla procedura javascript che me lo visualizza correttamente nella console ma non riesco ad estrarre i dati delle varie parti (obj1, obj2, obj3).

    qualcuno sa indicarmi la strada?
    Guidino

  2. #2
    Di ritorno da php avrai qualcosa del tipo
    codice:
    return_obj = ajax( ... );
    Devi però convertirlo, adesso, se ti ritorna una stringa Json (se dalla consolle vedi proprio la stringa) con JSON.Parse(tua_variabile_di_ritorno) e a quel punto accedi alle varie parti dell'oggetto

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da guidino Visualizza il messaggio
    Ciao a tutti,
    ritorno l'oggetto alla procedura javascript che me lo visualizza correttamente nella console ma non riesco ad estrarre i dati delle varie parti (obj1, obj2, obj3).

    qualcuno sa indicarmi la strada?
    Se sai lavorare con gli array in JavaScript, non vedo la problematica.

    Supponendo che il valore venga inserito in una variabile di nome data, puoi fare cose del tipo accedere al primo elemento del primo gruppo per leggerne una proprietà in questo modo:
    codice:
    alert(data.obj1[0].titolo);
    Il resto viene da sé.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,684
    [rimuovo] post duplicato dopo edit
    Ultima modifica di KillerWorm; 29-12-2021 a 18:11
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,684
    Ciao, puoi chiarire meglio il contesto?
    Come ti arrivano i dati sul JavaScript, ne definisci l'oggetto principale in una variabile, o come?
    Vuoi accedere direttamente a specifici elementi oppure vuoi eseguire un parsing completo per riversarne tutti i valori da qualche parte?

    Mettiamo il caso che l'oggetto principale è definito come una costante sul tuo JavaScript:
    codice HTML:
    const dati = {
    "obj1":[{"id":"1","titolo":"titolo1","dal":"2021-10-20","al":"2022-12-10"}],
    "obj2":[{"id":"1","testo":"testo1..."},{"id":"2","testo":" testo2..."},{"id":"3","testo":"testo3..."}],
    "obj3":[{"success":1}]
    };
    La struttura è composta da oggetti ed array.

    Nel caso di oggetti, per ottenere il contenuto di una specifica proprietà (conoscendone il nome), in generale puoi usare la notazione a punti (specificando direttamente il nome della proprietà) oppure la notazione a parentesi quadre (indicando il nome come valore testuale tra le parentesi).

    Esempio:
    codice HTML:
    console.log( dati.obj1 );
    // oppure
    console.log( dati["obj1"] );
    Nel caso di array (che in JavaScript hanno indice a base 0), per ottenere il contenuto di uno specifico elemento (conoscendone l'indice), in generale puoi usare la notazione a parentesi quadre (indicando l'indice numerico tra le parentesi).

    Ad esempio, per ottenere il primo elemento di "obj2" puoi fare in questo modo:
    codice HTML:
    console.log( dati.obj2[0] ); // output: {"id":"1","testo":"testo1..."}
    Per accedere alle proprietà di questo oggetto puoi procedere quindi come già detto:

    Ad esempio, per ottenere la proprietà "testo", puoi fare:
    codice HTML:
    console.log( dati.obj2[0].testo ); // output: "testo1..."
    Chiaramente, se vuoi invece eseguire un parsing dell'intero oggetto "dati", dovrai ciclare opportunamente le varie proprietà degli oggetti e gli elementi degli array.

    Spero quantomeno di averti fornito una panoramica sull'argomento, fai sapere se ti è sufficiente così, altrimenti chiarisci meglio nel caso ti serva ulteriore aiuto.

    Buon proseguimento




    EDIT: @dascos @alka scusatemi, arrivato secondo, non ho fatto a tempo a vedere il vostro intervento, ho perso tempo nei dettagli e con i vari bug di questa piattaforma
    Ultima modifica di KillerWorm; 29-12-2021 a 18:12
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Quote Originariamente inviata da alka Visualizza il messaggio
    Se sai lavorare con gli array in JavaScript, non vedo la problematica.

    Supponendo che il valore venga inserito in una variabile di nome data, puoi fare cose del tipo accedere al primo elemento del primo gruppo per leggerne una proprietà in questo modo:
    codice:
    alert(data.obj1[0].titolo);
    Il resto viene da sé.

    Ciao!
    conosco la teoria, il problema è che
    alert(data.obj1[0].titolo);

    mi dà errore
    Cannot read properties of undefined (reading '0')
    at Object.<anonymous>
    Guidino

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    se definisco l'oggetto in una variabile / costante javascript
    const dati = {
    "obj1":[{"id":"1","titolo":"titolo1","dal":"2021-10-20","al":"2022-12-10"}],
    "obj2":[{"id":"1","testo":"testo1..."},{"id":"2","testo ":" testo2..."},{"id":"3","testo":"testo3..."}],
    "obj3":[{"success":1}]
    };


    console.log(dati["obj1"][0].titolo);

    funziona

    ..... ma
    se uso l'oggetto ricevuto dalla chiamata ajax a php (che ritorna i dati con echo json_encode(oggetto))
    console.log(dati["obj1"][0].titolo);
    mi da sempre errore. Uncaught TypeError: Cannot read properties of undefined (reading '0') at Object.<anonymous>

    e questo è il mio problema che resta!

    idee?
    Guidino

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,684
    La teoria è corretta, verifica che l'oggetto non arrivi corrotto al JavaScript.

    Non è che nella variabile javascript lo hai racchiuso tra apici?

    Non è che ci sia qualche carattere ei valori testuali, tipo i doppi apici, che romperebbero l'oggetto?

    Vedi se nella console del tuo browser ricevi degli errori.

    Fai un console.log() di data poi di data.obj1 poi di data.obj1[0], vedi cosa ti salta fuori.


    Edit: ah ecco, lo stai passando attraverso una chiamata AJAX. Se non è impostata per ricevere dei dati json è chiaro che dal php ti arriverà solo una stringa testuale che rappresenta il json. In tal caso dovrai convertire la stringa una volta che ti arriva al javascript. Puoi usare ad esempio JSON.parse
    Ultima modifica di KillerWorm; 30-12-2021 a 00:25
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    grazie,
    andava convertito in oggetto con JSON.parse.

    Strano, mi aspettavo che con json_encode di php trasmettessi l'oggetto

    Si può chiudere.
    Auguri di buon anno nuovo a tutti
    Guidino

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da guidino Visualizza il messaggio
    andava convertito in oggetto con JSON.parse.
    Questo è il motivo per cui è sempre bene riportare il codice completo (o la parte significativa), altrimenti è impossibile diagnosticare il problema.

    Quote Originariamente inviata da guidino Visualizza il messaggio
    Strano, mi aspettavo che con json_encode di php trasmettessi l'oggetto
    E infatti l'oggetto viene trasmesso, ma la trasmissione avviene tramite un socket e usando il protocollo HTTP, quindi ciò che viene trasferito è una rappresentazione dell'oggetto stesso, che nel caso di json_encode() - il nome non è a caso - viene espressa usando appunto il formato JSON.

    JavaScript riceve questa rappresentazione testuale dell'oggetto, ma essa potrebbe essere espressa in qualsiasi formato, da XML all'uso di un formato personalizzato; si tratta in ogni caso di una rappresentazione, di una serializzazione, che trasferisce i dati dell'oggetto all'interno di un pacchetto di testo che ne contiene struttura e dati utilizzando il formato scelto.

    Una volta ricevuto il testo, se sai che si tratta di JSON, devi necessariamente sottoporlo a un JSON.parse() per convertire quella che è una rappresentazione in un oggetto JavaScript vero e proprio (a meno che nel testo non ci siano errori formali).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.