Je crée un site Web personnel sur lequel je peux garder le contenu à jour sans devoir manipuler la variable HTML
. J'essaie d'y parvenir simplement en chargeant et en mettant à jour un fichier JSON
. Mais pour le moment, je ne parviens pas à charger les données JSON
dans une variable scope
.
HTML
<!doctype html>
<html>
<head>
<script src="angular.min.js" type="text/javascript"></script>
<script src="maincontroller.js" type="text/javascript"></script>
</head>
<body>
<div ng-app="mainApp" ng-controller="mainController">
<div id="content">
<div ng-repeat="content in contents">
<h2>{{content.heading}}</h2>
<p>{{content.description}}</h2>
</div>
</div>
</div>
</body>
</html>
maincontroller.js
var myapp = angular.module('mainApp', []);
myapp.controller('mainController',function($scope,$http){
$scope.contents = null;
$http.get('mainContent.json')
.success(function(data) {
$scope.contents=data;
})
.error(function(data,status,error,config){
$scope.contents = [{heading:"Error",description:"Could not load json data"}];
});
//$scope.contents = [{heading:"Content heading", description:"The actual content"}];
//Just a placeholder. All web content will be in this format
});
Voici à quoi ressemble le fichier JSON
[
{"heading":"MyHeading","description":"myDescription"},
]
J'ai en fait essayé de suivre la solution donnée ici , mais cela ne charge pas le fichier JSON
stocké dans le même dossier. La sortie que je reçois provient de la fonction de traitement des erreurs qui dit Error: Cannot load JSON data
comme mentionné.
Qu'est-ce que je fais mal?
EDIT: Je mets le même code sur plunker et cela fonctionne bien. Cela ne fonctionne tout simplement pas sur ma machine locale.
Modifié votre méthode Utilisez ceci et vérifiez la sortie.
var myapp=angular.module('mainApp',[]);
myapp.controller('mainController',function($scope,$http){
$scope.content = null;
$http.get('urlpath'}).
success(function(data, status, headers, config) {
$scope.contents=data;
}).error(function(data, status, headers, config) {
});
});
ou une autre bonne pratique que je vois
Utiliser la méthode de service d'usine: -
angular.module('mainApp').factory('Myservice', function($http){
return {
getdata: function(){
return $http.get('url'); // You Have to give Correct Url either Local path or api etc
}
};
});
Injecter le service ci-dessus au contrôleur
Manette :-
angular.module('mainApp',[]).controller('mainController',function($scope,Myservice){
$scope.content = null;
Myservice.getdata().success(function (data){
alert('Success');
$scope.content=data[0]; // as per emilySmitley Answer which is Working Good
});
});
Faites moi savoir si vous avez des questions . Bonne chance
Votre fichier json a un tableau avec le premier et unique élément du tableau étant un objet json. Lorsque .success()
se déclenche et que des données sont transmises à la fonction lambda, les données sont un tableau, pas seulement JSON. Tout ce que vous avez à faire est d'accéder à l'élément zeroth du tableau.
Donc ça:
.success(function(data) {
$scope.contents = data;
})
Devrait être ceci:
.success(function(data) {
$scope.contents = data[0];
})
Aussi, vous devriez vérifier data[0]
pour vous assurer que c'est bien JSON, et s'il ne valide pas, vous devriez probablement appeler parseJSON(data[0])
dessus.
var myapp=angular.module('mainApp',[]);
myapp.controller('mainController',function($scope,$http){
$scope.content = null;
$http({method: 'GET', url: 'mainContent.json'}).
success(function(data, status, headers, config) {
$scope.contents=data;
}).error(function(data, status, headers, config) {
});
});
Publié dans Web Server et ajouté le type Mime pour .json. Ça a marché.
Je ne sais pas si vous avez toujours été en mesure de trouver la solution… .. Si ce n'est pas le cas, essayez ceci… .. Lorsque vous utilisez le serveur localhost, le serveur ne parvient pas à localiser les fichiers JSON… .. À résoudre Pour résoudre ce problème, il suffit de renommer votre fichier en mainContent.txt. En dehors de cela, votre code est parfait . Mais rappelez-vous qu’il s’agit uniquement de la phase de développement, lorsque vous envisagez de déployer le site en direct, revenez au fichier .json. .
demande $ http mise à jour: -
$scope.contents = null;
$http.get('mainContent.json')
.success(function(data) {
$scope.contents=data;
})
.error(function(data,status,error,config){
$scope.contents = [{heading:"Error",description:"Could not load json data"}];
});
Modifiez vos fichiers mainController.js et JSON comme suit. Ici, j'utilise wamp server comme serveur local.
var myapp = angular.module('mainApp', []);
myapp.controller('mainController', function($scope, $http) {
$http.get('http://localhost/stackoverflow/angular/test1/database.json').success (function(data) {
$scope.contents = data.records;
})
});
Fichier JSON:
{
"records":
[
{"heading":"MyHeading","description":"myDescription"}
]
}