2013-07-10 5 views
-1

J'utilise jquery et javascript, avec un appel ajax pour obtenir toutes les informations d'un fichier json. Le fichier json se charge bien, et ajoute parfaitement les points à la carte, mais il y a toujours une erreur dans la console.AJAX JSON parse renvoie false

"TypeError: obj[i].info is null" 

Bien que chaque point est inséré correctement et a l'attribut « info » en eux, pourquoi ne donne jquery une valeur nulle?

code Exemple:

$.ajax({ 
    url: 'http://localhost:3000/api/', 
    type: 'GET', 
    dataType: 'html', 
}).success(function(data){ 
    var obj = $.parseJSON(data); 
     console.log(obj); 
     $.each(obj, function(i, item){ 
      taxiData.push(new google.maps.LatLng(obj[i].info.latitude,obj[i].info.longitude)); 
     }); 

}).error(function(data){ 
    console.log("Error with data: " + data); 
}); 

Mon JSON:

[{ 
     "id" : 1, 
     "ip" : "165.242.13.8", 
     "referer" : "www.facebook.com", 

     "info" : { 
      "request" : "165.242.13.8", 
      "ip" : "165.242.13.8", 
      "country_code2" : "JP", 
      "country_code3" : "JPN", 
      "country_name" : "Japan", 
      "continent_code" : "AS", 
      "region_name" : "11", 
      "city_name" : "Hiroshima", 
      "postal_code" : "", 
      "latitude" : 34.3963, 
      "longitude" : 132.45940000000002, 
      "dma_code" : null, 
      "area_code" : null, 
      "timezone" : "Asia/Tokyo" 
     } 
    } 
] 
+0

utilisation dataType: 'json', –

+0

j'ai édité mon code, et définir le type de données comme json, l'analyse est correcte mais il y a toujours une erreur – Yagiz

+0

Vous n'avez pas besoin de $ .parseJSON (data) si vous spécifiez dataType: json – LMeyer

Répondre

0

essayer ceci:

$.ajax({ 
    url : 'http://localhost:3000/api/', 
    type : 'GET', 
    dataType : 'json', 
}).success(function (data) { 
    var obj = data; 
    console.log(obj); 
    $.each(obj, function (i, item) { 
     var pushString = item.info.latitude + ',' + item.info.longitude; 
     var googleLatLong = new google.maps.LatLng(pushString); 
     taxiData.push(googleLatLong); 
    }); 
}).error(function (data) { 
    console.log("Error with data: " + data); 
}); 
2

Vous utilisez $.each mal.

each prend déjà chaque entrée et vous le donne en tant qu'élément.

utilisation:

$.each(obj, function(i, item){ 
      taxiData.push(new google.maps.LatLng(item.info.latitude,item.info.longitude)); 
     }); //Notice I don,t access the obj Object 
+0

encore une fois il est dit que l'élément [i] est indéfini – Yagiz

+1

L'élément est l'objet dans votre tableau, pas le tableau lui-même –

+0

J'ai défini l'élément comme taxiData.push (new google.maps.LatLng (item.info.latitude, item.info.longitude)); mais l'erreur continue, ** mais elle imprime les points à l'écran ** – Yagiz

0

Tout d'abord, vous pouvez définir

dataType : "json" 

et ne pas faire

var obj = $.parseJSON(data); 

vos données sera déjà un objet

Se Condly, ce code fonctionne

console.log(obj); 
$.each(obj, function(i, item){ 
    console.log(obj[i].info.latitude); 
    console.log(obj[i].info.longitude); 
    console.log(item.info.latitude); 
    console.log(item.info.longitude); 
}); 

item === obj [i]