Я хочу выбрать список элементов, основанный на выборе. Я вызываю функцию api, которая дает мне список данных, чтобы вставить второй выбор.
Вызов работает нормально, я пытаюсь предупредить результат, но мне нужно изменить значение второго выбора, и я терпит неудачу. Я использую select2.
Это моя страница THYMELEAF:
<form id="updateD" data-parsley-validate class="rounded px-2 py-2 mt-3" th:action="@{/ditta/upd}" th:method="POST" th:object="${ditta}">
<div class="row" th:if="*{codice==null or codice.isEmpty()}">
<div th:replace="~{/tags/input :: inputNorm(indirizzo, *{indirizzo}, text, true, '')}"></div>
<div th:replace="~{/tags/select :: selectValue(city, *{city}, ${cities}, false)}"></div>
<div th:replace="~{/tags/select :: selectValue(zip, *{zipCode}, ${zips}, false)}"></div>
</div>
</form>
Код JS:
<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/
var token = $('#_csrf').attr('content');
var header = $('#_csrf_header').attr('content');
$(function(){
$('#city').change(function(){
handleComune($('#city').val());
});
$('.sel2').select2({
theme: "bootstrap"
});
});
function handleComune(city){
$.ajax({
type: 'GET',
url:[[ @{'/api/extractZip?city='}]]+city,
beforeSend: function(xhr) {
xhr.setRequestHeader(header, token);
},
success : function(data) {
$('#zips').val(data);
alert(data);
}
});
}
/*]]>*/
</script>
Основываясь на выборе города, я извлекаю список zipcode.
Фрагментами выбора являются следующие:
<div th:fragment="selectValue(name, selected, values, required)" class="col form-group" th:switch="${required}">
<label th:text="${required} ? #{${name}}+'*' : #{${name}}" th:for="${name}" class="control-label"></label>
<div class="col form-group">
<select th:name="${name}" th:id="${name}" class="form-control sel2" th:required="${required}">
<option value=""></option>
<th:block th:each="v : ${values}">
<option th:value="${v}" th:text="${v}" th:selected="${selected} eq ${v}"></option>
</th:block>
</select>
</div>
</div>
$ ('# Zips'). Val (данные); не изменить. Что не так?
После нескольких попыток я решил так:
function handleComune(city){
$.ajax({
type: 'GET',
url:[[ @{'/api/extractZip?city='}]]+city,
beforeSend: function(xhr) {
xhr.setRequestHeader(header, token);
},
success : function(data) {
$('#zip').empty();
var arrayCap = data.toString().split(",");
for (a in arrayCap ) {
var newOption = new Option(data[a], data[a], false, false);
$('#zip').append(newOption).trigger('change');
}
}
});
}
Мне нужно разделить мои данные, потому что ответ представляет собой строку данных, разделенных запятыми.
Теперь он отлично работает!
Если вы возвращаете фрагмент Thymeleaf из своего контроллера, вы получите код html. Таким образом, val()
не будет работать. Вам нужно использовать append(data)
. Теперь я не вижу вашего контроллера или где находится элемент $('#zips')
, поэтому я предполагаю, что это то, что вы отправляете.
Если вы отправляете список сущностей, вам нужно будет использовать $.each(data, function() {//Do something });
для добавления каждого объекта в качестве опции в ваш выбор.