J'envoie une requête sur un serveur et sa réponse est la suivante:
{"COLUMNS":["REGISTRATION_DT","USERNAME","PASSWORD","FNAME","LNAME","EMAIL","MOBILE","FACEBOOK_ID"],"DATA":[["March, 17 2012 16:18:00","someuser",somepass,"somename","somesur","someemail",sometel,"someid"]]}
J'ai essayé beaucoup mais rien ne semble fonctionner pour moi!
var xml2 = this.responseData;
var xml3 = xml2.getElementsByTagName("data");
Ti.API.log(xml3.FNAME);
Pour ce code je reçois "null".
Toute aide serait appréciée!
Si vous essayez d'utiliser le format JSON, votre problème est que les données du [...]
doivent également être par paires et regroupées dans {...}
comme ici .
Par exemple,
{
"sales": [
{ "firstname" : "John", "lastname" : "Brown" },
{ "firstname" : "Marc", "lastname" : "Johnson" }
] // end of sales array
}
Donc vous pourriez avoir:
{"COLUMNS": [
{"REGISTRATION_DT" : "19901212", "USERNAME" : "kudos", "PASSWORD" : "tx91!#1", ... },
{"REGISTRATION_DT" : "19940709", "USERNAME" : "jenny", "PASSWORD" : "fxuf#2", ... },
{"REGISTRATION_DT" : "20070110", "USERNAME" : "benji12", "PASSWORD" : "rabbit19", ... }
]
}
Si le serveur vous envoie quelque chose que vous appelez res
, vous pouvez simplement le faire pour l'analyser dans votre Javascript:
var o=JSON.parse(res);
Vous pouvez ensuite parcourir chaque instance dans les colonnes comme suit:
for (var i=0;i<o.COLUMNS.length;i++)
{
var date = o.COLUMNS[i].REGISTRATION_DT; ....
}
voir ce lien. LIRE LA RÉPONSE JSON
C'est parfait.
Les objets JSON fonctionnent comme n'importe quel objet javascript ou dictionnaire ordinaire
// You can do it this way
var data = this.responseData["DATA"]
// Or this way
var data = this.responseData.DATA
Dans votre cas, COLUMNS et data sont tous deux des tableaux. Il semble donc que vous tentiez d'obtenir l'élément à partir des données correspondant à l'élément "FNAME" dans COLUMNS?
var columns = this.responseData["COLUMNS"];
var data = this.responseData["DATA"][0];
for(var i=0; i<columns.length; i++){
if(columns[i] == "FNAME"){
Ti.API.log(data[i]);
}
}
EDIT: Si vous ne pouvez pas modifier les données côté serveur, vous pouvez créer votre propre objet côté client. Cela aide également si vous devez faire référence à plusieurs colonnes (ce que vous faites probablement).
var columns = this.responseData["COLUMNS"];
var data = this.responseData["DATA"][0];
var realData = {};
for(var i=0; i<columns.length; i++){
realData[columns[i]] = data[i];
}
// Now you can access properties directly by name.
Ti.API.log(data.FNAME);
Plus modifier: Mes réponses ne considèrent que la première ligne de données, parce que j'ai mal interprété à l'origine. Je vous laisse le soin de déterminer comment traiter les autres.
Lors du test de votre code dans http://jsonlint.com/ , il est indiqué que la réponse de votre serveur n'est pas une chaîne JSON valide.
De plus, je recommande de vérifier jQuery.parseJSONhttp://api.jquery.com/jQuery.parseJSON/
Si vous êtes arrivé ici, essayez de lire comment lire [Response object]
(comme je l'ai fait) -.__ Voici ce qui peut aider: - si vous utilisez fetch, n'oubliez pas res.json()
avant de vous connecter à la console
fetch(`http://localhost:3000/data/${hour}`, {
method: 'get'
})
.then(res => {
return res.json()
})
.then((response) => {
console.log('res: ' + JSON.stringify(response))
})
Il suffit d'utiliser JSON.parse(serverResponse)