Select2使用ajax响应数据生成id

时间:2017-12-13 16:23:18

标签: jquery ajax jquery-select2

我的JSON响应数据不包含ID字段,Select2需要该字段才能显示结果。在文档中,它们提供了生成id的方法,但是,我无法这样做。有人可以提供一个如何做到这一点的例子吗?到目前为止我试过这个:

  $('.itemSearch').select2(
     ajax: {
     type: "POST",
     url: '/Default.aspx/TestMethod',
     data: function(params){
       var query={
           message:params.term
       }
       return JSON.stringify(query);
     },
     processResults: function (data) {
                var data1 = $.map(data, function (obj) {
                   obj.id = obj.id || obj.ItemNumber; // replace pk with your identifier
                   return obj;
                });                         
      return {
         results: data.items,
      };
    }
   }
 });

1 个答案:

答案 0 :(得分:1)

这是一个正确的代码段,使用index函数中的map作为 Select2 的ID:



var data = [{
    "text": "Test item no. 1"
  },
  {
    "text": "Test item no. 2"
  },
  {
    "text": "Test item no. 3"
  },
  {
    "text": "Test item no. 4"
  }
];

$('.itemSearch').select2({
  ajax: {
    type: "POST",
    url: '/echo/json/',
    data: function(params) {
      var query = {
        message: params.term,
        data: data
      }
      return {
        json: JSON.stringify(query)
      }
    },
    processResults: function(data) {
      var data1 = $.map(data.data, function(obj, idx) {
        obj.id = obj.id || idx;
        return obj;
      });
      return {
        results: data1,
      };
    }
  }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />

<select id="myselect2" class="itemSearch" data-placeholder="click to load..." style="width:200px">
</select>
&#13;
&#13;
&#13;

这里有一个工作小提琴:https://jsfiddle.net/beaver71/7rqg3rck/

<强> P.S:

SO上的代码片段不起作用,因为存在Ajax调用。

相反,Jsfiddle使用户能够模拟这些Ajax调用,但在示例中数据被发送(通过POST)到&#34; / echo / json /&#34;服务并反映为同一个Ajax请求的结果。