PHP, Array Multidimensionale e Grafici

  • Creatore Discussione Creatore Discussione max1974
  • Data di inizio Data di inizio
Utilizzo semplicissimo del filtro js "Number.isFinite"
Codice:
function createSeries(data,object){
    let ret=[];
    data.forEach(function(element){
        ret.push({data:[...new Set(createData(object,{f1:element,f2:'Difetto',return:'Qta'}))].filter(Number.isFinite)});
    })
    return ret;
}

Questa è la risposta dal tuo json, e come puoi vedere lo "0" viene stampato!
  1. {x: Array(2), x1: Array(5), y: Array(0), series: Array(5)}
    1. series: Array(5)
      1. 0:
        1. data: Array(2)
          1. 0: 0
          2. 1: 1
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      2. 1:
        1. data: Array(2)
          1. 0: 3
          2. 1: 0
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      3. 2:
        1. data: Array(2)
          1. 0: 0
          2. 1: 2
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      4. 3:
        1. data: Array(2)
          1. 0: 2
          2. 1: 0
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      5. 4:
        1. data: Array(1)
          1. 0: 0
          2. length: 1
          3. __proto__: Array(0)
        2. __proto__: Object
      6. length: 5
      7. __proto__: Array(0)
    2. x: Array(2)
      1. 0: "November"
      2. 1: "December"
      3. length: 2
      4. __proto__: Array(0)
    3. x1: Array(5)
      1. 0: "Deformato"
      2. 1: "Impasto Sporco"
      3. 2: "Macchie Ferro"
      4. 3: "Mal Smaltati"
      5. 4: "Nessun Difetto"
      6. length: 5
      7. __proto__: Array(0)
    4. y: []
    5. __proto__: Object



let object=JSON.parse(JSON.stringify(response.aoData));
Perchè fai questa cosa? Non ha senso....
La risposta da ajax non deve arrivare text ma application/json... quindi basterebbe utilizzare solo il JSON.parse....

Magari potresti anche prevedere l'utilizzo di axios per le richieste in questo modo non dovrai fare nessuna operazione sulla risposta:

Codice:
axios.get('/my_file').then(function(response){
    let object=response.data.aoData
});
Più pulito...
 
Utilizzo semplicissimo del filtro js "Number.isFinite"
Codice:
function createSeries(data,object){
    let ret=[];
    data.forEach(function(element){
        ret.push({data:[...new Set(createData(object,{f1:element,f2:'Difetto',return:'Qta'}))].filter(Number.isFinite)});
    })
    return ret;
}

Questa è la risposta dal tuo json, e come puoi vedere lo "0" viene stampato!
  1. {x: Array(2), x1: Array(5), y: Array(0), series: Array(5)}
    1. series: Array(5)
      1. 0:
        1. data: Array(2)
          1. 0: 0
          2. 1: 1
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      2. 1:
        1. data: Array(2)
          1. 0: 3
          2. 1: 0
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      3. 2:
        1. data: Array(2)
          1. 0: 0
          2. 1: 2
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      4. 3:
        1. data: Array(2)
          1. 0: 2
          2. 1: 0
          3. length: 2
          4. __proto__: Array(0)
        2. __proto__: Object
      5. 4:
        1. data: Array(1)
          1. 0: 0
          2. length: 1
          3. __proto__: Array(0)
        2. __proto__: Object
      6. length: 5
      7. __proto__: Array(0)
    2. x: Array(2)
      1. 0: "November"
      2. 1: "December"
      3. length: 2
      4. __proto__: Array(0)
    3. x1: Array(5)
      1. 0: "Deformato"
      2. 1: "Impasto Sporco"
      3. 2: "Macchie Ferro"
      4. 3: "Mal Smaltati"
      5. 4: "Nessun Difetto"
      6. length: 5
      7. __proto__: Array(0)
    4. y: []
    5. __proto__: Object




Perchè fai questa cosa? Non ha senso....
La risposta da ajax non deve arrivare text ma application/json... quindi basterebbe utilizzare solo il JSON.parse....

Magari potresti anche prevedere l'utilizzo di axios per le richieste in questo modo non dovrai fare nessuna operazione sulla risposta:

Codice:
axios.get('/my_file').then(function(response){
    let object=response.data.aoData
});
Più pulito...
controlla nella tua risposta al punto 5.4. trovi length: 1 perche array contiene due zeri ed in realta ne riporta solo 1

per quello che riguarda la risposta del $.ajax la ottengo cosi
Codice:
$.ajax({
      url:'myfile.php',
      data: {Tipo_Sel:"GRAPH-DIFETTI"},
      type: 'POST',
      dataType: 'json',
      success: function(response){
dovre gia essere formato json o sbaglio ???
 
controlla nella tua risposta al punto 5.4. trovi length: 1 perche array contiene due zeri ed in realta ne riporta solo 1

cosa fa "...new Set" in JS? Crea un array di elementi unico..... quindi basta modificare 1 punto in base alle tue necessità, che sicuramente non sono queste, studiando un pò la situazione in modo più approfondito ti accorgerai che sarebbe meglio utilizzare:
  • Lato server
    • Controllore
    • Http Response
  • Lato Client
    • Una collection dati
    • Un mutuatore dati
Visto che non hai impostato questo, credo che debba fare a mano quello che ti serve....

dovre gia essere formato json o sbaglio ???
Sbagli, tu stai inviando i dati tipo JSON, la risposta la fa il server no lo script js lato client.


Per lavorare in js, non basta saper leggere e scrivere (in programmazione).
 
Ultima modifica:

Discussioni simili