选择2不加载远程数据

时间:2013-07-14 03:57:26

标签: jquery jquery-select2

我在使用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对象而不是构造函数中。

1 个答案:

答案 0 :(得分:3)

看起来我在使用JSONP而未实现服务器端。将数据类型移动到json可以解决问题。