我正在使用select2插件(v4),并使用ajax加载他的选项。
如果我第一次打开选择输入,将加载数据。当我再次打开选择时,将重新加载相同的数据。
有什么方法可以防止这种“重新加载”数据?我的意思是,如果我只是打开select2并且先前已加载选项,则我不想再次加载。
这是我当前的代码:
$(select_input).select2({
ajax: {
url: url,
dataType: 'json',
quietMillis: 250,
data: function (params) {
return {
term: params.term,
page: params.page,
page_limit: default_page_size
};
},
processResults: function (data) {
return {
results: data.data,
pagination: {
more: (data.page * default_page_size) < data.count
}
};
},
cache: true
},
escapeMarkup: function (markup) {
return markup;
},
minimumInputLength: 0,
templateResult: formatTemplateResult,
templateSelection: formatTemplateSelection
});
由于您正在使用select2_v.4,因此必须使用data- adapters
(query
并且initSelection
方法在V.4.0中已弃用)以下是custom-data- adapter
通过名为方法使用的示例AMD-Pattern
。我没有机会进行测试,但是我相信这会为您提供继续前进的方向。
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" />
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.full.min.js"></script>
<script>
var cachedData;
$.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 (params, callback) {
var retData;
if (cachedData != undefined) // check if data existing in cachedData variable
retData = cachedData;
else {
$.ajax({
url: url,
dataType: 'json',
quietMillis: 250,
data: function (params) {
return {
term: params.term,
page: params.page,
page_limit: default_page_size
};
},
success: function (data) {
retData = {
results: data.data,
pagination: {
more: (data.page * default_page_size) < data.count
}
};
cachedData = retData; // save the retData in a global variable
},
error: function (er) {
debugger;
},
cache: true
});
}
callback(retData);
};
return CustomDataAdapter;
}
);
$(document).ready(function () {
var customAdapter = $.fn.select2.amd.require('select2/data/customAdapter');
$("#select1").select2({
tags: true,
dataAdapter: customAdapter,
escapeMarkup: function (markup) {
return markup;
},
minimumInputLength: 0,
templateResult: formatTemplateResult,
templateSelection: formatTemplateSelection
});
});
</script>
在此示例中:https://jsfiddle.net/wqd4ebyn/2/: 我正在尝试使用ajax获取远程数据并使用当前选项预加载列表。除非我删除了ajax,否则它不起作用: 我的列表太大了。我想要的是列出一些非常常见的选项,其余的由ajax列出。当前的实现确实允许两者兼而有之,静态选项或动态选项。我需要两者。
我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片
问题内容: 旋转屏幕时,WebView会重新加载整个页面。我无法使用此功能,因为我的某些内容包含动态/随机材料。当前,屏幕旋转时会从loadUrl()方法重新加载原始URL。 知道我的代码有什么问题吗? MainActivity.java AndroidManifest.xml 问题答案: 我认为主要问题是您调用了web.loadUrl(webURL); 当saveInstanceState!=
问题内容: 我想为我的项目使用select2插件。我遵循了 此 示例,但对我而言不起作用。 JSON输出 : 剧本 : HTML : 这是我使用以下代码测试代码时的结果: Select2:AJAX结果未在响应键中返回数组。 我在哪里弄错了? 问题答案: 从提供的示例链接到所收到的错误消息,您似乎都在使用Select2 4.0。但是,您的代码是为Select2的早期版本编写的。 如果要继续使用Sel
问题内容: 我正在使用Select2 JS版本4.0.0-rc.1,并且无法通过远程Ajax方法加载建议。 以下是标记和代码 JavaScript jQuery 服务器返回的Json结果 我完全不确定是否需要编写特定的函数来显示建议,有关Ajax部分的评论指出,我们不应更改结果Json数据。 现在有人请告诉我,让代码正常工作以显示建议还需要做些什么。 我想随着新版本的select2发生了很多变化。
目前,我正在使用一个控制器来获取所有数据,并将其放置在视图类中的foreach语句中。因此,每当加载页面时,它都会执行此函数。为了实现这一点,我使用了如下方法: 控制器类: 查看类别: 但是现在我希望页面加载得更快,因此只有当用户单击该特定的select2语句时,我才希望加载下拉列表。我尝试了以下代码来获取具有选择2功能的select2变量,即通过下拉列表获取输入文本,但都不起作用。它只是在我的页