错误:未定义的对象!使用jquery解析JSON时

时间:2014-06-27 01:03:43

标签: c# jquery asp.net json

这应该很简单,但我似乎无法使其正常工作。

给定一个如下所示的JSON字符串:

     {
    "?xml":

         {
        "@version":"1.0",
        "@encoding":"ISO-8859-1"
         },
    "results":
    {

         "title":"AOL Movies - Closest Theater and Showtimes",
        // etc,
        "theater":
        {
            "theaterId":"10650",
            "id":"10650",
            // etc
        },
        "movie":
            [
                {
                "studios":"Warner Bros.",
                "movieId":"61683"
                        }
                 ]
}  

在尝试获取任何值时,我不断获取未定义的对象,例如: data.movi​​e或data.results.title。

一切"看起来"确定输出。

jQuery.ajax({
        type: 'GET',
        contentType: 'application/json',
        url: 'handler.ashx',
        data: 'zip=' + postalCodes.join(','),
        success: function (payload) {
            var data = that.objectifyJSON(payload); // this returns typeof = object

            that.constructMoviesArray(data);
        },
        error: function (error) {
            alert(error.responseText);
        }
    });

this.constructMoviesArray = function (data) {
    var key, movie, theater = null;

    var movies = {};

    movies.items = {};

    movies.length = 0;
    alert(data[0].movie); // FAIL - there's clearly an array but nothing displays

我希望这是足够的信息;我对JSON和jQuery没有经验,所以我很难弄清楚为什么我似乎无法解决这个问题。

2 个答案:

答案 0 :(得分:1)

添加json dataTypehttp://api.jquery.com/jquery.ajax/

即使您设置了contentType

,服务器响应可能仍然是一个字符串
jQuery.ajax({
    type: 'GET',
    contentType: 'application/json',
    url: 'handler.ashx',
    data: 'zip=' + postalCodes.join(','),
    dataType: 'json', // <--- UPDATE ME
    success: function (payload) {
        var data = that.objectifyJSON(payload); // this returns typeof = object

        that.constructMoviesArray(data);
    },
    error: function (error) {
        alert(error.responseText);
    }
});

如果这没有用,请尝试在成功回调中添加console.log或断点。您将能够仔细查看您在payload中使用的数据类型。

success: function (payload) {
    console.log(payload);
},

希望有所帮助!

答案 1 :(得分:0)

尝试喜欢

var geocodingAPI = "http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true";

$.getJSON(geocodingAPI, function (json) {

    // Set the variables from the results array
    var address = json.results[0].formatted_address;
    console.log('Address : ', address);

    var latitude = json.results[0].geometry.location.lat;
    console.log('Latitude : ', latitude);

    var longitude = json.results[0].geometry.location.lng;
    console.log('Longitude : ', longitude);

    // Set the table td text
    $('#address').text(address);
    $('#latitude').text(latitude);
    $('#longitude').text(longitude);
});

Demo