Как я могу использовать данные JSON для заполнения параметров поля выбора? - PullRequest
48 голосов
/ 07 мая 2011

Мне нужно кормить города в зависимости от страны выбора.Я сделал это программно, но понятия не имею, как поместить данные 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, но это никогда не делало ничего, кроме заполнения моего выбора "НЕ УКАЗАНО" для меня, даже несмотря на то, что я получил ответ в формате, предложенном в учебнике.

<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>

Ответы [ 5 ]

98 голосов
/ 07 мая 2011

Почему бы просто не заставить сервер возвращать имена?

["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));
        });
    }
});
25 голосов
/ 17 ноября 2015

Учитывая возвращенный 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));
            });
    });
17 голосов
/ 07 мая 2011

Вы должны сделать это так:

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);
           });
        }
    });
};

Приветствия

0 голосов
/ 13 февраля 2018

Зевстль прав.это работает и для меня.

   <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));
        });
  });
0 голосов
/ 09 декабря 2017

Взгляните на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...