在提交时,JSON数据返回:“无法读取未定义的属性'值'”

时间:2015-08-31 20:38:08

标签: javascript jquery json

我在拉入JSON数据以填充两个单独的选择字段(国家/地区和城市)。

提交表格时,我得到:

Cannot read property 'value' of undefined

我尝试使用以下方法重置数据:

data.countries = data[0];
data = data[0];

之前/之后,它返回:

Uncaught TypeError: Cannot read property 'length' of undefined

以下是我用来检索数据的代码片段

$.ajax({
    url: myAPI,
    type: 'POST',
    success: function (data) {

    $.each(data.countries, function (index, value) {
      country.append('<option value="' + value.name + '">' + value.name +'</option>');
    });

    country.on('change', function() {
        var self = $(this).val();

        city.find('option').remove();
        for(var i = 0; i < data.countries.length; i++) {
            if(data.countries[i].name == self) {
                $.each(data.countries[i].metroAreas, function (index, value) {
                  city.append('<option value="' + value.name+'">' + value.name +'</option>');
                });
            }
        }
    });
  } 

});

1 个答案:

答案 0 :(得分:1)

您应该告诉jQuery使用dataType option将结果解析为JSON。

当省略时,jQuery将根据Content-Type响应头猜测数据类型。这是一个常见的问题,服务器没有设置此标头或设置不正确(例如text/html)。

$.ajax({
    url: myAPI,
    type: 'POST',
    dataType: 'json',
    success: function (data) {

    $.each(data.countries, function (index, value) {
      country.append('<option value="' + value.name + '">' + value.name +'</option>');
    });

    country.on('change', function() {
        var self = $(this).val();

        city.find('option').remove();
        for(var i = 0; i < data.countries.length; i++) {
            if(data.countries[i].name == self) {
                $.each(data.countries[i].metroAreas, function (index, value) {
                  city.append('<option value="' + value.name+'">' + value.name +'</option>');
                });
            }
        }
    });   } 

});