У меня есть этот HTML:

<select id="test"></select>

И этот код ajax:

<script>
function get(name){
if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))
  return decodeURIComponent(name[1]);
}

//url: localhost/web/index.php?name='whatever'
var value = get('name');

$(document).ready(function(){
$('select').select2();  

$.ajax({
type: "POST",
url: 'getValues.php',
data: {'test': $("#test").val(),'isAjax':true},
dataType:'json',
success: function(data) {

   var select = $("#test"), options = '';
   select.empty();      
   for(var i=0;i<data.length; i++)
   {
    options += "<option value='"+data[i].id+"'>"+ data[i].name +"</option>";   
   }

   select.append(options);
}
});
});
</script>

Мне нужно установить значение select как взято из URL, который является (var value). Значение работает нормально, как я проверял в состоянии тревоги.

Любая помощь приветствуется

0
Sally 6 Янв 2017 в 16:42

3 ответа

Лучший ответ

Скорее всего, именно AJAX вызывает проблему. вам нужно подрезать () ответ, чтобы удалить пробел в конце возвращаемых данных. Попробуйте следующее:

success: function(data) {
   var response = data.trim(), select = $("#test"), options = '';
   select.empty();      
   for(var i=0;i<response.length; i++)
   {
    options += "<option value='"+response[i].id+"'>"+ response[i].name +"</option>";   
   }

   select.append(options).val(value);
}
0
gavgrif 6 Янв 2017 в 14:30

Моя проблема решена.

Проблема заключалась в том, что возвращаемое значение имеет пробел, который берется из URL как +, поэтому я заменил «+» на «»

Спасибо всем !

0
Sally 7 Янв 2017 в 07:46

1) Вы можете использовать .val() после добавления параметров:

select.append(options);
select.val(value);

2) или добавить выбранный атрибут к опции, имеющей такое же значение, при построении строки html параметров.

options += "<option value='"+data[i].id+"' "+(data[i].id == value ? "selected" : "") +">"+ data[i].name +"</option>";   
2
Milind Anantwar 6 Янв 2017 в 13:51