我在使用select2时遇到了一些问题。我尝试通过以下API文档加载远程数据,但是我仍然得到一个加载指示器,没有错误,但没有显示数据。
以下是一些代码:https://gist.github.com/Fire-Dragon-DoL/5993136
使用Javascript:
(function() {
var $;
$ = jQuery;
$(function() {
$('a.submit-link').on('click', function(ev) {
ev.preventDefault();
$(this).closest('form').submit();
});
$('.spinner-float').spinner({
step: 0.01,
numberFormat: 'n',
min: 0
});
$('.spinner').spinner({
min: 0
});
$('.select2-cities').select2({
width: 200,
minimumInputLength: 1,
dropdownCssClass: 'bigdrop',
loadMorePadding: 300,
formatResult: function(obj, container, query, escapeMarkup) {
console.log("formatResult");
return obj.name;
},
formatSelection: function(obj, container) {
console.log("formatSelection");
return obj.name;
},
initSelection: function(element, callback) {
var id;
console.log("initSelection");
id = $(element).val();
if ((id != null) && id !== '') {
$.ajax(gon.cities_path + '/' + id + '.json', {
dataType: 'jsonp'
}).done(function(data) {
console.log("initSelection callback");
console.log(data);
callback(data);
});
}
},
ajax: {
url: gon.cities_path + '.json',
dataType: 'jsonp',
data: function(term, page) {
return {
query: term,
page: page - 1
};
},
results: function(data, page) {
console.log("results");
console.log(data);
return data;
}
}
});
});
}).call(this);
以下是json的回复:
{
"total": 8084,
"results": [
{
"cap": 35031,
"id": 8085,
"name": "Abano Terme",
"province": "PD",
"state_id": 25
},
{
"cap": 26834,
"id": 8086,
"name": "Abbadia Cerreto",
"province": "LO",
"state_id": 21
}
],
"more": false
}
html的一部分(select2正确显示,我认为不是问题):
<!-- ... -->
<script type="text/javascript">
//<![CDATA[
window.gon = {};gon.cities_path="http://localhost:3000/cities";
//]]>
</script>
<!-- ... -->
<input class="select2-cities" id="travel_diary_city_id" name="travel_diary[city_id]" type="hidden" value="13987" />
在gist文件中,您还可以找到代码的coffeescript版本。我真正不明白的是console.log
在任何情况下都没有调用,所以基本上不会调用格式化函数和类似的东西。
更新1:解决了javascript代码的一些问题,其中一些键位于ajax对象而不是构造函数中。
答案 0 :(得分:3)
看起来我在使用JSONP
而未实现服务器端。将数据类型移动到json可以解决问题。