Как я могу использовать данные JSON для заполнения опций окна выбора?
Мне нужно кормить города по стране отбора. Я сделал это программно, но понятия не имею, как помещать данные 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>
Я также попытался использовать этот учебник по автозаполняющимся блокам выбора с использованием jQuery и 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>
Ответы
Ответ 1
Почему бы просто не вернуть серверу имена?
["Woodland Hills", "none", "Los Angeles", "Laguna Hills"]
Затем создайте элементы <option>
, используя JavaScript.
$.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));
});
}
});
Ответ 2
С учетом возвращенного json из вашего://site.com:
[{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));
});
});
Ответ 3
Вы должны сделать это следующим образом:
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);
});
}
});
};
Приветствия
Ответ 4
Посмотрите механизм просмотра JQuery и просто загрузите массив в выпадающее меню:
$.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
Ответ 5
Зевстль прав. это работает и для меня.
<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));
});
});