J'essaie d'extraire des données à partir d'un fichier JSON et d'afficher ces données dans le formulaire
lien de fichier JSON: https://raw.githubusercontent.com/datameet/railways/master/trains. JSON P>
J'essaie avec le code ci-dessous. Mais il renvoie après l'erreur dans FETCHDATA.COMPONENT.TS Fichier: P>
Propriété 'JSON' n'existe pas sur le type "objet". p> blockQuote>
fetchdata.component.ts p>
xxx pré> fetchdata.component.html p>
xxx pré> aide. p> p>
5 Réponses :
Vous n'avez pas besoin d'appeler upd: votre objet JSON n'est pas un tableau lui-même. Vous devez aussi bien mettre à jour votre modèle de la manière suivante: p> .json () code> Fonction au cas où vous feriez un this.http.get code>. Angulaire fait ça pour vous. Faites simplement ceci.items = res code>. Cela fera le tour.
Suggérez-vous de faire ceci: articles: tout; res: tout; constructeur (http privé: httpclient) {this.http.get (this._trainorl) .Subscribe (res => ceci.items = res); console.log (this.Res); }
Il suffit de changer ceci.items = res.json () code> à ceci.items = res code> dans le code que vous avez fourni. console.log (éléments) code> retournera non défini code> dans votre exemple, car http.get est une opération asynchrone.
Maintenant, je reçois cette erreur dans la console Chrome et il ne montre aucune donnée dans SELECT: Impossible de trouver un objet de support différent '[Objet d'objet]' de type 'objet'. Ngfor prend uniquement en charge la liaison à des itérables tels que des tableaux.
Il y a une différence entre les En bref, passe de I.e Également, comme une bonne pratique, utilisez la méthode http code> et httpClient code> et ils sont également exportés différemment. P>
http code> strong> -> est le module principal qui oblige l'utilisateur à appeler res.json () code>. Ceci était commun avant la version angulaire 4.0. P> li>
httpclient code> strong> -> est un nouveau module depuis la version 4.0. Il est par défaut la communication à JSON et vous n'avez donc pas besoin d'appeler res.json () code> explicitement. P> li>
ol>
res.json () code> à juste res code> corrigera le problème
Pour vous. P>
blockQuote>
ceci.items = res; code> devrait être bien. P>
Ngoninit code> de cycle de vie au lieu du constructeur pour effectuer des appels HTTP. P>
Je reçois cette erreur dans la console Chrome et il ne montre aucune donnée dans SELECT: Impossible de trouver un objet de support différent '[objet d'objet]' de type 'objet'. Ngfor prend uniquement en charge la liaison à des itérables tels que des tableaux. J'ai écrit ceci: .subscribe (res => ceci.items = res); code> console.log (this.items); code>
C'est parce que le trains.json code> URL que vous appelez renvoie un objet JSON au lieu du tableau. Et vous essayez probablement de le théier dans votre modèle en utilisant ngfor code>. Vérifiez la propriété correcte et son type que vous attribuez au composant code> SELECT CODE>.
Pourquoi faites-vous ceci.items = res.json () code>? Pourquoi pas seulement ceci.items = res code>? res code> doit déjà tenir l'objet JSON renvoyé de la demande d'obtention. Si c'est effectivement une chaîne, essayez ceci.items = json.parse (res) code>. P>
Pouvez-vous essayer:
Cela fonctionne mais en partie. Il montre les données JSON dans la console mais pas dans SELECT. Il donne cette erreur dans la console: impossible de trouver un objet de support différent '[objet d'objet]' de type 'objet'. Ngfor prend uniquement en charge la liaison à des itérables tels que des tableaux.
La réponse n'est probablement pas ce que vous pensez. Je vous suggère de consoler.log () la réponse de votre requête pour voir ce qu'elle ressemble en fait: Vous verrez que vous obtenez une chose comme celle-ci dans votre console: P > constructor(private http:HttpClient) {
this.http.get( this._trainUrl)
.subscribe(res => {
this.items = res["features"];
});
}
Merci. Cela fonctionne et merci pour la suggestion, je vais regarder la bibliothèque RxJS.
Essayez
console.log (res) code>? Il renvoie probablement déjà le corps de réponse lui-même. Vous n'avez besoin que d'utiliser .json () si vous utilisez l'API de Fetch NativeIl donne maintenant une autre erreur: "Impossible de trouver le nom" res "."
Je vois .. je suppose que rien des réponses ci-dessous résout votre problème aussi?
Bonjour, @ Tony7931 Vérifiez la réponse de l'API. Vous pouvez obtenir l'objet en réponse et que cet objet passe dans
* ngfor code> qui n'est pas valide et que vous pouvez également affecter directementres code> àceci.items code> . Commececi.items = res code>