angulaire.js - AngularJS utilise la méthode $http.jsonp pour demander des données de manière incorrecte dans tous les domaines
巴扎黑
巴扎黑 2017-05-15 16:54:25
0
8
756

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 ?

巴扎黑
巴扎黑

répondre à tous(8)
巴扎黑

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 :

<?php
$callback = $_GET['callback'];
$response = array('code'=>200, 'data'=>'success');

$json = json_encode($response);
echo "$callback($json)";
漂亮男人

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 :

angular.callbacks._0({
    "longitude": 120.1614,
    "latitude": 30.2936,
    "asn": "AS4837",
    "offset": "8",
    "ip": "60.12.58.161",
    "area_code": "0",
    "continent_code": "AS",
    "dma_code": "0",
    "city": "Hangzhou",
    "timezone": "Asia\/Shanghai",
    "region": "Zhejiang",
    "country_code": "CN",
    "isp": "CNCGROUP China169 Backbone",
    "country": "China",
    "country_code3": "CHN",
    "region_code": "02"
});

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 :

JSON_CALLBACK({
    "longitude": 120.1614,
    "latitude": 30.2936,
    "asn": "AS4837",
    "offset": "8",
    "ip": "60.12.58.161",
    "area_code": "0",
    "continent_code": "AS",
    "dma_code": "0",
    "city": "Hangzhou",
    "timezone": "Asia\/Shanghai",
    "region": "Zhejiang",
    "country_code": "CN",
    "isp": "CNCGROUP China169 Backbone",
    "country": "China",
    "country_code3": "CHN",
    "region_code": "02"
})

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.

过去多啦不再A梦

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) {

console.log(data);

};

Que faire si je dois effectuer autre chose lorsque je renvoie une erreur ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal