2016-07-25 52 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