2014-01-06 83 views
1

我需要使用從ajax調用中獲得的值來填充選擇項,我將這些值作爲json數組返回。使用下面的代碼,選擇創建時沒有任何選項。Ajax add option to select for each json array

$.ajax({ 
    type: "GET", 
    url: "/wp-content/gta/search_airport.php", 
    data: {city: t_city} 
}).done(function(resp){ 
    var sel = $('<select name="airport" id="slt">').appendTo('#pick_type'); 
    $.each(resp, function() { 
$.each(this, function(k, v) { 
$('<option>').val(k).text(v).appendTo('#slt'); 
    }); 
    }); 
}); 

例JSON數組

[{"name":"Los Angeles","code":"LAX"},{"name":"San Francisco","code":"SFO"}] 

我喜歡的選項是像<option value="LAX">Los Angeles</option>

回答

3

你並不需要一個嵌套$.each()。通過陣列直接只是環,並且每個索引處訪問該對象的屬性:

$.each(resp, function(k, v) { 
    $('<option>').val(v.code).text(v.name).appendTo('#slt'); 
}); 

在第一次迭代,v{"name":"Los Angeles","code":"LAX"},所以v.code"LAX"。在第二次迭代,v{"name":"San Francisco","code":"SFO"},所以v.code"SFO" ...

(您可能還需要添加dataType:"json"$.ajax()選項 - 如果你不指定的jQuery試圖從響應的工作了MIME類型。)

+0

這樣做的工作,謝謝..但那麼函數上的'k'會發生什麼? – enriqg9

+1

'k'將成爲當前項目的索引,所以在第一次迭代中它將是'0',然後第二次迭代它將是'1'。根據你的特殊要求,你不需要在函數中使用'k',但是_does_需要作爲佔位符存在於函數聲明中,所以'v'是_second_參數。儘管現在我想到了它,你可以省略'k'和'​​v',並在函數中使用'this.code'和'this.name' ... – nnnnnn

0

試試這個,

$.ajax({ 
    type: "GET", 
    url: "/wp-content/gta/search_airport.php", 
    data: {city: t_city}, 
    dataType:"json" 
}).done(function(resp) { 
    var sel = $('<select name="airport" id="slt">').appendTo('#pick_type'); 
    $.each(resp, function(key,val) { 
     $.each(val, function(k, v) { 
      $('<option>').val(k).text(v).appendTo('#slt'); 
     }); 
    }); 
});