2016-07-25 86 views
1

我正在与争夺数据的AJAX调用,它看起来是这样的:JS jQuery的每个环路滤波器追加列表

{ 
    "cars":[{ 
     "id":"654", 
     "type": "ford", 
     "active": "1" 
    },{ 
     "id":"650", 
     "type": "fiat", 
     "active": "0" 
    }] 
} 

我然后用数据来填充这个代码选择框:

$.ajax({ 
    url: 'myurlhere', 
    method: 'GET', 
    async: false, 
    success: function(result) { 

     $.each(result, function(result, value) { 
      $('#myselect').append($('<option>').text(value.id).attr('value', value.id)); 
     }); 

    } 
}); 

我的问题是,我只是想用数据填充其有选择激活=“1”(对数据)

所以,我已经做到了这一点:

$.ajax({ 
    url: 'myurlhere', 
    method: 'GET', 
    async: false, 
    success: function(result) { 

     if (value.active = 1) { 
      $.each(result, function(result, value) { 
       $('#myselect').append($('<option>').text(value.id).attr('value', value.id)); 
      }); 
     } 

    } 
}); 

但这不是过滤它,仍然返回所有。

我该如何解决这个问题?

回答

3

首先,你需要删除async: false,因为它是非常不好的做法来使用它。

其次,你可以使用filter()result.cars阵列上只找到这其中active'1'

var data = result.cars.filter(function(obj) { 
    return obj.active == '1'; 
}) 

$.each(data, function(result, value) { 
    $('#myselect').append($('<option>', { 
     text: value.id, 
     value: value.id 
    })); 
}); 

或者你能做到这一点的$.each循环本身,但请注意,您通过result.cars需要循环,不result

$.each(result.cars, function(i, value) { 
    if (value.active == '1') { 
     $('#myselect').append($('<option>', { 
      text: value.id, 
      value: value.id 
     })); 
    } 
}); 

这将取决于有源元件多少是阵列中的哪个上述的方法会更快,但实际上可能没有太大的差别。理想情况下,您可以修改响应以仅返回活动对象,但我认为这是第三方API,因此不受您的控制。

2

你的if语句是做一个任务,不检查平等,对于初学者。需要value.active === "1"另外,你需要if语句在.each方法内部,而不是外部。

+1

你是绝对没错,谢谢。我根据你的评论编辑了答案。 –

0

让我知道它是否无效。
希望这会有所帮助。

.ajax({ 
    url: 'myurlhere', 
    method: 'GET', 
    async: false, 
    success: function(result) { 
     $.each(result.cars, function(key, value) { 
      if(value.active == 1) { 
       $('#myselect').append($('<option>').text(value.id).attr('value', value.id)); 
      }  
     }); 
    } 
}); 
+0

有人可以让我知道我出错的地方吗?为什么它低调? –

+1

对OPs代码做了什么或者出了什么问题的解释总是有用的。只有代码答案才会在审核队列中被删除 – empiric

+0

就代码而言,您在追加方面有不平衡的圆括号,因此它不起作用。我通常首先尝试我的答案(例如jsfiddle)以确保它的工作。 – bg6471