我无法解析来自我应用的响应。这是我最好的猜测,如何处理json回来......
$.ajax({
url: 'houses.json',
method: 'GET',
datatype: 'json',
success: function (data) {
$.each(data, function (h) {
$(h).each(function () {
console.log(h.address);
});
});
});
以下是我从服务器返回的响应:
[{
"house": {
"address": "7 view st dunedin nz",
"lng": 170.500908,
"id": 3,
"lat": -45.875059
}
}, {
"house": {
"address": "26 brown st dunedin nz",
"lng": 170.496236,
"lat": -45.875834,
}
}]
我能得到的最好的就是让它说未定义。一旦。我正在尝试设置一个循环来为谷歌地图创建标记。
我可以用另一双眼睛。
任何人?
感谢。
答案 0 :(得分:4)
由于h
是一个数组,您需要沿着属性链向下,h
是具有house
属性的address
个对象的集合,因此请更改它有点像这样:
$.each(data, function(i, h){
console.log(h.house.address);
});
确保删除周围的额外循环,因为只有一个数组,所以不需要。
这是一种可视化的方式来考虑它:
h h.house h.house.address
[ { "house":{ "address":"7 view st dunedin nz".....
答案 1 :(得分:0)
这是因为,您将回调函数定义为function(h)
思考,h
是数组中的对象。但事实并非如此,它是元素的索引。
保留参数并使用this
(指向元素):
$.each(data, function(){
console.log(this.house.address);
});
或定义两个参数:
$.each(data, function(index, element){
console.log(element.house.address);
});
或通过索引访问数组:
$.each(data, function(h){
console.log(data[h].house.address);
});
Nick已经说过,你应该如何访问这些属性。
参考:each()
答案 2 :(得分:0)
each
回调中的第一个参数是索引,因此您需要两个参数:
$.ajax({
url: 'houses.json',
method: 'GET',
datatype: 'json',
success: function(data){
$.each(data, function(i, item){
$.each(item, function(j, house){
console.log(house.address);
});
});
});
或者,您可以使用将项目设置为回调的上下文这一事实,因此您可以使用this
关键字来访问它:
$.ajax({
url: 'houses.json',
method: 'GET',
datatype: 'json',
success: function(data){
$.each(data, function(){
$.each(this, function(){
console.log(this.address);
});
});
});
内部循环将遍历对象中的属性,该属性只有一个。您可以直接访问酒店:
$.ajax({
url: 'houses.json',
method: 'GET',
datatype: 'json',
success: function(data){
$.each(data, function(){
console.log(this.house.address);
});
});
答案 3 :(得分:0)
应该是
$.ajax({
url: 'houses.json',
method: 'GET',
dataType: 'json',
success: function(data){
$.each(data, function(h){
console.log(h.house.address);
});
请注意dataType: 'json',
和console.log(h.house.address);
部分。