select2异步获取(ajax)数据带记忆功能
主要解决搜索过的关键词就不用ajax去后端取数据了,用已存数据展示即可,相当于把数据记录记忆了,减少后端的压力。
var parent = $("#parentid"), dataCaches = Array(), timeEr = null; $.fn.select2.amd.define('select2/data/customAdapter', [ 'select2/data/array', 'select2/utils' ], function (ArrayAdapter, Utils) { function CustomDataAdapter($element, options) { CustomDataAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(CustomDataAdapter, ArrayAdapter); CustomDataAdapter.prototype.query = function (q, callback) { var key = q.term; if (!key || key.length < 2 || /^[a-zA-Z1-9]+$/.test(key)) { return false; } var dataCache = dataCaches[key]; if (dataCache) { callback({results: dataCache}); } else { timeEr && window.clearTimeout(timeEr); timeEr = window.setTimeout(function () { $.ajax({ url: '/api/article/get_list', data: {name: key, puid: puid}, dataType: 'json', type: 'POST', success: function (data) { var _data = []; if (data.length > 0) { for (d in data) { _data.push({ id: data[d].id, text: data[d].name + "(" + data[d].id + ")" }); } } dataCaches[key] = _data; callback({results: _data}); } }) }, 500); } }; return CustomDataAdapter; } ); var customAdapter = $.fn.select2.amd.require('select2/data/customAdapter'); parent.select2({ language: "zh-CN", dataAdapter: customAdapter });