我正在使用抓取数据进行ajax调用,如下所示:
{
"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));
});
}
});
我的问题是我只想使用有效=&#34; 1&#34; (对于数据)
的数据填充选择内容所以我做到了这一点:
$.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));
});
}
}
});
但这并没有过滤它,仍然全部归还。
我该如何解决这个问题?
答案 0 :(得分: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,因此无法控制。
答案 1 :(得分:2)
您的if语句正在为初学者进行分配,而不是检查相等性。需要value.active === "1"
此外,你想在.each方法中使用if语句,而不是在外面。
答案 2 :(得分: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));
}
});
}
});