Bonjour,

Je souhaite récupérer la date dans un fichier

Mon test c'est

$http({method: 'GET', url: urlDataDistant, cache: false, timeout: 1500}).
                success(function(data, status) {
                    var distant = data.paramsField.params[0].data.date;
                    console.log('distant version : ' + distant + " / code " + status);
                    deferred.resolve(distant);
                }).error(function(data, statuts) {
                    deferred.reject('ERROR');
                });

qui me sort un beau

Cannot read property 'params' of undefined

Je suis perdu, c'est quoi la solution ?

8 réponses


Vallyan
Réponse acceptée

Le geojson reste du json, il n'y a donc normalement pas de truc du genre

var kiki = {....}

dedans (voir ici pour reference: http://geojson.org/).

Le truc qui fait que c'est du <u>GEO</u>json, c'est simplement le nom des variables a l'intérieur qui est une convention (type, features).

Le fait que ton exemple soit différent me fait penser que c'est une particularité de leafletjs, qui a sa propre méthode de parsing (que n'as pas angular, donc). Si tu veux vraiment coller a leaflet, va falloir que tu utilise leur truc ou que tu adapte ton code. Si tu t'en fous, je te conseille plutot de coller avec les conventions json classiques.

Bonne chance ;)

C'est la méthode .getScript() que tu dois utiliser pour sourcer un script:

$.getScript('http://1ffa3ba638.url-de-test.ws/map1.js');
YooPlait
Auteur

Oui mais justement, j'utilise angularjs pas jquery... ça me dit pas trop de mixer des méthodes. Avec $http si j'inclut le fichier sans le "var" ça marche. Je demande de l'aide pour lire la data, pas pour la charger.

Tu veux dire

eval( data )

?

YooPlait
Auteur

Ben je veux juste comprendre pourquoi

data.paramsField.params[0].data.date;

n'est pas valide... j'ai bien compris que c'était pas du json mais un object JS, mais je ne comprends toujours pas comment y arriver. eval n'est pas sécurisé il me semble, non ?

YooPlait
Auteur

(avec eval oui ça marche, mais meme si je suis noob en js, j'avais cru comprendre que c'était pas terrible de l'utiliser).

Sécurisé ? eval( string ) execute le contenu d'une string. Par exemple:

var kiki = 'alert()'; // Stocke une string dans une variable, ne trigger pas d'alerte
eval( kiki ); // Trigger une alerte

Si le data que te retourne ton url est une string ( a vérifier avec typeof( data ), d'ailleurs), ca executera le script et donc créera ta variable. Mais si par sécuriser tu veux dire que n'importe quel script sera utiisé, c'est vrai.

Enfin une autre option c'est de fire un vrai json, qui te permet d'accéder a ta variable paramsField:

{
    "paramsField" : {
        "params" : 
            {
                "data" : {
                    "date" : "2010-03-09"
                }
            }
         ]
    }
}

auquel cas il n'y a pas de risque de sourcer un js foireux.

YooPlait
Auteur

Justement Vallyan, le soucis viens que ce n'est pas du "vrai json", mais je me base sur ce que m'indique leaflet : http://leafletjs.com/examples/sample-geojson.js, moi j'ai rajouté un truc pour versionner mon fichier et pouvoir lire la date.

Donc si je comprends bien : js object, il faut inclure - json, simple appel ajax ?

J'avais essayer de mixer du vrai json et du object, mais bon je crois que c'est idiot parce que ça n'a pas marché :p