【发布时间】:2019-11-30 01:52:19
【问题描述】:
我有一个场景,在选择 designation 时,benefits 将根据 designation 在下拉列表中加载。
我为此编写了一个 ajax 调用。
HTML:
<label>Designations</label>
<%= f.association :designation, input_html: { id: 'designation_select'},label_html: { class: 'form-control-plaintext' } %>
<label>Benefits</label>
<%= f.collection_select :benefit_ids, Benefit.all,:id, :name, {}, { id: 'benefit_select',multiple: 'multiple', :class => 'form-control multiselect-all',:include_blank => "Select Benefit" } %>
AJAX 调用:
<script type="text/javascript">
document.addEventListener("turbolinks:load", function() {
$('#designation_select').change(function() {
debugger
id = $('#designation_select')[0].value;
$.ajax({
type: 'GET',
dataType: 'html',
data: {designation_id: id},
url: '/benefits/benefit_by_designation',
success: function(result) {
debugger
var el, length, options, parser, results, x;
$('#benefit_select').empty();
$('#benefit_select').prepend('<option value=\'\'> Select Benefit </option>');
parser = new DOMParser;
el = parser.parseFromString(result, 'text/html');
options = el.getElementsByTagName('option');
length = options.length;
x = 0;
results = [];
while (x < length) {
$('#designation_select')[0].appendChild(options[0]);
results.push(x++);
}
return results;
}
});
});
});
</script>
控制器中的方法:
def benefit_by_designation
benefits = Benefit.where('designation_id = ?', params[:designation_id])
render html: view_context.options_from_collection_for_select(benefits, :id, :name, {include_blank: 'Select Benefit'})
end
在控制器中的benefits = Benefit.where.. 查询之前,代码运行得非常好,但render html: 没有按我希望的那样工作。如何在下拉列表中显示 benefits 列表?
编辑:
我不小心将 ajax 调用中的datatype 设置为json,但我现在将其设置为html。现在,ajax调用成功案例正在命中,但仍然没有显示结果。
【问题讨论】:
-
如果你使用的是ajax,你不是还需要respond_to :js 吗?
-
我不知道,你告诉我..
标签: html ruby-on-rails ajax