2015-08-31 26 views
0

我正在拉取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>'); 
       }); 
      } 
     } 
    }); 
    } 

}); 
+3

你確定'data.countries'是'array'而不是'object'嗎? – Diego

+1

此外,如果在提交表單時引發錯誤,那麼您可能正在運行一些代碼。這是什麼? – Diego

+1

@Diego,試圖訪問對象上的'.length'將返回未定義的,不拋出'TypeError',如果該對象實際上已定義,並且如果該對象未定義,將引發'ReferenceError' –

回答

1

你應該告訴jQuery使用dataType option解析JSON結果爲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>'); 
       }); 
      } 
     } 
    }); } 

}); 
相關問題