AJAX JSON解析返回false

时间:2013-07-10 09:28:29

标签: javascript jquery ajax json

我正在使用jquery和javascript,使用ajax调用从json文件中获取所有信息。 json文件加载正常,并将点完美地添加到地图中,但控制台中仍然存在错误。

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

即使每个点都正确插入并且其中包含“info”属性,为什么jquery会给它一个空值?

示例代码:

$.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);
});

我的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"
        }
    }
]

3 个答案:

答案 0 :(得分:2)

您使用$.each错误。

each已经每个条目并将其作为项目提供给您。

使用:

$.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

答案 1 :(得分:1)

首先, 你可以设置

dataType : "json"

并且不要

var obj = $.parseJSON(data);

您的数据已经是一个对象

其次, 这段代码可以使用

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]

答案 2 :(得分:0)

试试这个:

$.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);
});