我需要根据选择国家来喂养城市。我是以编程方式完成的,但不知道如何将JSON数据放入选择框。我尝试了几种使用jQuery的方法,但它们都没有用。
我得到的回复(如有必要,我可以采用不同的格式):
["<option value='Woodland Hills'>Woodland Hills<\/option>","<option value='none'>none<\/option>","<option value='Los Angeles'>Los Angeles<\/option>","<option value='Laguna Hills'>Laguna Hills<\/option>"]
但是,如何将此数据作为选项放在HTML <select></select>
代码中?
我试过的代码:
<form action="" method="post">
<input id="city" name="city" type="text" onkeyup="getResults(this.value)"/>
<input type="text" id="result" value=""/>
<select id="myselect" name="myselect" ><option selected="selected">blank</option></select>
</form>
</div>
<script>
function getResults(str) {
$.ajax({
url:'suggest.html',
type:'POST',
data: 'q=' + str,
dataType: 'json',
success: function( json ) {
$('#myselect').append(json);
}
});
};
$( '.suggest' ).keyup( function() {
getResults( $( this ).val() );
} );
</script>
我也试过使用这个tutorial on auto-populating select boxes using jQuery and AJAX,但除了用“UNDEFINED”填充我的选择之外我从未做过任何事情,即使我得到了教程建议的格式的回复。
<script type="text/javascript" charset="utf-8">
$(function(){
$("select#city").change(function(){
$.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$("select#myselect").html(options);
})
})
})
</script>
答案 0 :(得分:98)
为什么不让服务器返回名字?
["Woodland Hills", "none", "Los Angeles", "Laguna Hills"]
然后使用JavaScript创建<option>
元素。
$.ajax({
url:'suggest.html',
type:'POST',
data: 'q=' + str,
dataType: 'json',
success: function( json ) {
$.each(json, function(i, value) {
$('#myselect').append($('<option>').text(value).attr('value', value));
});
}
});
答案 1 :(得分:25)
从您的://site.com返回json:
[{text:"Text1", val:"Value1"},
{text:"Text2", val:"Value2"},
{text:"Text3", val:"Value3"}]
使用此:
$.getJSON("your://site.com", function(json){
$('#select').empty();
$('#select').append($('<option>').text("Select"));
$.each(json, function(i, obj){
$('#select').append($('<option>').text(obj.text).attr('value', obj.val));
});
});
答案 2 :(得分:17)
你应该这样做:
function getResults(str) {
$.ajax({
url:'suggest.html',
type:'POST',
data: 'q=' + str,
dataType: 'json',
success: function( json ) {
$.each(json, function(i, optionHtml){
$('#myselect').append(optionHtml);
});
}
});
};
干杯
答案 3 :(得分:0)
看一下JQuery view engine,然后将数组加载到下拉列表中:
$.ajax({
url:'suggest.html',
type:'POST',
data: 'q=' + str,
dataType: 'json',
success: function( json ) {
// Assumption is that API returned something like:["North","West","South","East"];
$('#myselect').view(json);
}
});
请在此处查看详细信息:https://jocapc.github.io/jquery-view-engine/docs/ajax-dropdown
答案 4 :(得分:0)
zeusstl是对的。它也适合我。
<select class="form-control select2" id="myselect">
<option disabled="disabled" selected></option>
<option>Male</option>
<option>Female</option>
</select>
$.getJSON("mysite/json1.php", function(json){
$('#myselect').empty();
$('#myselect').append($('<option>').text("Select"));
$.each(json, function(i, obj){
$('#myselect').append($('<option>').text(obj.text).attr('value', obj.val));
});
});
答案 5 :(得分:0)
我知道这个问题有点老了,但是我会使用jQuery模板和$ .ajax调用:
ASPX:
<select id="mySelect" name="mySelect>
<option value="0">-select-</option>
</select>
<script id="mySelectTemplate" type="text/x-jquery-tmpl">
<option value="${CityId}">${CityName}</option>
</script>
JS:
$.ajax({
url: location.pathname + '/GetCities',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response) {
$('#mySelectTemplate').tmpl(response.d).appendTo('#mySelect');
}
});
除上述内容外,您还需要一个Web方法(GetCities),该方法可返回对象列表,其中包括您在模板中使用的数据元素。我经常使用实体框架,而我的Web方法将调用一个管理器类,该类使用linq从数据库中获取值。这样,您就可以将输入保存到数据库并刷新选择列表,就像保存成功后调用JS中的databind一样简单。