Je savais ce qu'était AngularJS
avant, mais je viens de commencer à l'essayer aujourd'hui et j'ai rencontré ce problème.
Le code est le suivant :
$http.jsonp("https://request.address.json?callback=JSON_CALLBACK")
.success(
function(data, status, header, config){
$scope.list = data;
alert(data);
}
)
.error(
function(data){
alert("error");
}
);
Après l'accès, vous pouvez voir que le code d'état renvoyé est 200 via les outils de développement du navigateur, et vous pouvez voir la chaîne json
renvoyée, mais après l'exécution, la méthode error
est toujours appelée. depuis longtemps, je ne trouve pas de solution, y a-t-il un expert qui peut me donner une réponse ?
Côté client, la documentation officielle le précise très clairement« URL relative ou absolue précisant la destination de la requête. Le nom du callback doit être la chaîne JSON_CALLBACK. »Côté serveur, get Le paramètre de rappel est quelque chose comme angular.callbacks._0 calculé par angulaire côté client (angular calculera et mettra à jour la valeur du champ de rappel en fonction du nombre de requêtes du client avant l'envoi), et le le serveur reçoit le rappel Après le champ, renvoyez-le simplement sous forme de chaîne 'angular.callbacks._0({json data})', par exemple :
Publiez le json renvoyé et jetez-y un oeil
L'interface backend doit effectuer un traitement spécial pour les requêtes jsonp. La requête porte le paramètre de rappel :
Le retour doit être un morceau de code JavaScript :
Cela est lié au fait que JSONP peut traverser des domaines. JSONP utilise des balises de script comme support de requêtes tandis qu'Ajax utilise des objets XHR.
Le contenu renvoyé est modifié en :
Essayez-le ?
jsonp(url,[config]) ne peut traiter que les résultats au format JSONP (JSON != JSONP). Si les données que vous retournez sont au format JSON, jsonp() ne peut pas les analyser et signalera une erreur.
Le paramètre est callback=JSON_CALLBACK, angulaire remplacera automatiquement votre JSON_CALLBACK et vous attribuera un nom de rappel.
Vous pouvez demander des données, mais vous ne pouvez pas entrer sccess car le rappel défini par angulaire pour vous n'est pas déclenché. Je pense que c'est un peu un piège. Ce n'est pas aussi convivial que le design de jQuery
L'affiche originale a-t-elle résolu le problème ? J'ai également rencontré le même problème que vous. Je peux accéder au succès normalement sur le navigateur, mais lors du débogage sur mon téléphone portable, j'obtiens toujours une erreur, data=statut non défini : 404
.L'affiche originale a-t-elle résolu le problème ? J'ai également rencontré le même problème que vous.
Affichage de la console : JSON_CALLBACK n'est pas défini
$http.jsonp('http://m-static.igrow.cn/01tpl/json/data.json?callback=JSON_CALLBACK');
//Ajoutez ceci pour ajuster les données, mais cela semble bizarre.
window.JSON_CALLBACK = fonction (données) {
};
Que faire si je dois effectuer autre chose lorsque je renvoie une erreur ?