It is currently 21 April 2025, 21:09 Advanced search

JSON da Web Api Foundation

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

JSON da Web Api Foundation

Postby mcdok » 9 November 2016, 17:36

Da una chiamata a una web api fatta con foundation ottengo:

Code: Select all
res.body={"do_updated": -1, "do_inserted": -1, "do_deleted": 0, "do_loaded": 0, "Codice": 0, "Codice_O": "~~NULL~~", "Messaggio": "OK", "Messaggio_O": "~~NULL~~"}

vorrei leggere i valori di Codice e Messaggio.

se uso questo:
Code: Select all
var tmp = res.body;
console.log("Codice=" + tmp.Codice);

ottengo undefined

se uso questo:
Code: Select all
var tmp = JSON.parse(res.body);
console.log("Codice=" + tmp.Codice);

ottengo "Unexpected token  in JSON at position 0"

dove sbaglio?
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Re: JSON da Web Api Foundation

Postby lucabaldini » 10 November 2016, 7:25

Non ho capito bene... hai una web app fatta con Foundation. Se chiami una web-api ottieni un JSON fatto così:
Code: Select all
  {"do_updated": -1, "do_inserted": -1, "do_deleted": 0, "do_loaded": 0, "Codice": 0, "Codice_O": "~~NULL~~", "Messaggio": "OK", "Messaggio_O": "~~NULL~~"}


(non ho capito cos'è res.body... il web-server risponde con il solo JSON, giusto??).

Poi, in una applicazione Javascript scrivi:

Code: Select all
  var tmp = res.body


cosa è res? Hai fatto una chiamata con XMLHttpRequest? Perché body e non responseText?

Comunque, supponiamo che sia tutto corretto... se, invece di
Code: Select all
  var tmp = res.body;
  console.log("Codice=" + tmp.Codice);


scrivi
Code: Select all
  var tmp = res.body;
  console.log(tmp);
  console.log(typeof tmp);


cosa ottieni? Mi serve per capire se e come usare la JSON.parse...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON da Web Api Foundation

Postby mcdok » 10 November 2016, 7:35

Si scusa, ti posto tutta la sequenza in cui da una app Inde Cloud chiamo una WebApi presente in una app fatta con Inde Foundation:

Code: Select all
  var u = app.fs.url("http://99.99.99.99/AppFoundation/Utente/");
  var head = {
    "X-HTTP-Method-Override" : "GetUsers"
  };
  var par = {
    "customer" : '63',
    "type" : '3',
    "campaign" : '8',
    "device" : ''
  };
  var opt = {params : par, headers : head, timeout : 30000};
  var res = yield u.get(opt);
  console.log("Risultato=" + res.status + ">" + res.body);


res.status=200

mentre in res.body vedo:

{"do_updated": -1, "do_inserted": -1, "do_deleted": 0, "do_loaded": 0, "Codice": 0, "Codice_O": "~~NULL~~", "Messaggio": "OK", "Messaggio_O": "~~NULL~~", "UsersList": [ {"do_updated": -1, "do_inserted": 0, "do_deleted": 0, "do_loaded": -1, "USERCODE": 108, etc... }

e vorrei capire come fare a leggere i valori del Codice e del Messaggio di ritorno, oltre all'insieme di utenti contenuti in UsersList.
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Re: JSON da Web Api Foundation

Postby lucabaldini » 10 November 2016, 7:56

Ah, ora è tutto più chiaro...

Direi che res.body dovrebbe essere una stringa... quindi io proverei così:
Code: Select all
   var res = yield u.get(opt);
   var doc = JSON.parse(res.body);
   console.log("CODICE: " + doc.Codice)
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON da Web Api Foundation

Postby mcdok » 10 November 2016, 11:17

Infatti è il secondo tentativo che avevo riportato nel primo post ma il PARSE da questo errore:

"Unexpected token  in JSON at position 0"
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Re: JSON da Web Api Foundation

Postby lucabaldini » 10 November 2016, 13:07

Prova a scrivere questo e dimmi esattamente cosa ottieni:
Code: Select all
    var res = yield u.get(opt);
    console.log("RISULTATO: '" + res.body + "'"');


In altre parole vorrei vedere esattamente cosa contiene res.body... magari c'è uno spazio all'inizio...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON da Web Api Foundation

Postby mcdok » 10 November 2016, 13:25

Strano, nella console vedo questo:

Risultato='{"do_updated": -1,...

se faccio copia e incolla in notepad vedo questo:

Risultato='?{"do_updated": -1,...
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Re: JSON da Web Api Foundation

Postby mcdok » 10 November 2016, 13:33

e se uso questo codice funziona:

Code: Select all
 
  var doc = res.body.slice(1);
  var tmp = JSON.parse(doc);
  console.log("Codice=" + tmp.Codice);
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Re: JSON da Web Api Foundation

Postby lucabaldini » 10 November 2016, 14:18

Fico... potrebbe essere il BOM ( https://it.wikipedia.org/wiki/Byte_Order_Mark ) ovvero il carattere che comunica a chi legge che il testo che segue è una stringa UTF8... non so perché tu la vedi... probabilmente perché il javascript tenta di leggerla come se fosse Latin1 quindi lascia lì quel carattere... Comunque, se così funziona, usala così...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON da Web Api Foundation

Postby mcdok » 15 November 2016, 11:28

Ok, è probabile che sia quello perchè in effetti notepad (come dice nel link) non lo mostra, l'ho visto con un altro editor, ma secondo te chi lo inserisce? Non credo sia l'app foundation...
Vorrei capire se c'è un modo di evitarlo?
mcdok
 
Posts: 855
Joined: 19 July 2011, 16:18

Next

Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 6 guests

cron