我正在使用Select2 JS版本4.0.0-rc.1,并且无法通过远程Ajax方法加载建议。
以下是标记和代码
<select class="form-control input-sm" id="selFrame1" name="selFrame1"> <option> Select Frame </option> </select>
JavaScript jQuery
$('#selFrame1').select2({ ajax: { url: siteUrl+"suggest/frames", dataType: 'json', delay: 250, method:'POST', data: function (params) { return { q: params.term, // search term page: params.page }; }, processResults: function (data, page) { // parse the results into the format expected by Select2. // since we are using custom formatting functions we do not need to // alter the remote JSON data return { results: data.result }; }, cache: true } });
服务器返回的Json结果
{results: [{"Code":"123360000"},{"Code":"123360358"},{"Code":"123364000"},{"Code":"123400000"}], more: false }
我完全不确定是否需要编写特定的函数来显示建议,有关Ajax部分的评论指出,我们不应更改结果Json数据。
现在有人请告诉我,让代码正常工作以显示建议还需要做些什么。
我想随着新版本的select2发生了很多变化。
您的响应将作为Select2 3.x响应返回,这很好。因此,我们提供了此processResults方法(以前是results),因此您可以在客户端修改响应。
processResults
results
在您的情况下,您的响应中包含results键,但是您的processResponse函数引用的result键不存在。如果您将其更改为
processResponse
result
processResults: function (data, page) { // parse the results into the format expected by Select2. // since we are using custom formatting functions we do not need to // alter the remote JSON data return { results: data.results, pagination: { more: data.more } }; },
然后事情应该开始工作。这还将more响应的现有属性映射到pagination我们在Select2 4.0中迁移到的新密钥。
more
pagination