正如標題所示,我想只加載一次遠程數據。 我想到了加載具有獨立AJAX調用數據,並設置「本地」的控制,但不知道是否有更多的「中建」的方式做到這一點...使用Select2加載遠程數據一次
回答
的解決方案可以在這裏找到:
https://github.com/ivaynberg/select2/issues/110
$("#selIUT").select2({
cacheDataSource: [],
placeholder: "Please enter the name",
query: function(query) {
self = this;
var key = query.term;
var cachedData = self.cacheDataSource[key];
if(cachedData) {
query.callback({results: cachedData.result});
return;
} else {
$.ajax({
url: '/ajax/suggest/',
data: { q : query.term },
dataType: 'json',
type: 'GET',
success: function(data) {
self.cacheDataSource[key] = data;
query.callback({results: data.result});
}
})
}
},
width: '250px',
formatResult: formatResult,
formatSelection: formatSelection,
dropdownCssClass: "bigdrop",
escapeMarkup: function (m) { return m; }
});
編輯:
我會誤解你的問題。如果你想加載所有數據一次,那麼使用Select2,沒有內置的功能來做到這一點。
您的建議是做一個單一的查詢,然後在Select2中使用存儲的數據將是一條路。
要一次加載數據:
假設:
你在,供應對象
的JSON數組的數組包含有在對象REST API端點/服務至少有一個「名稱」和「ID」屬性。例如:
[{"id": 0, "name": "Foo"}, {"id": 1, "name": "Bar"}]
你想存儲陣列作爲全球「services_raw」
首先,我們的函數加載數據,並創建全球「services_raw」(又名「window.services_raw 「):
fetchFromAPI = function() {
console.log("fetchFromAPI called");
var jqxhr = $.ajax(
{
dataType:'json',
type: 'GET',
url: "/services",
success: function(data, textStatus, jqXHR) {
services_raw = data;
console.log("rosetta.fn.fetchServicesFromAPI SUCCESS");
rosetta.fn.refreshServicesSelect();
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error inside rosetta.fn.fetchServicesFromAPI", errorThrown, textStatus, jqXHR);
setTimeout(rosetta.fn.fetchServicesFromAPI(), 3000); // retry in 3 seconds
}
}
)
.done(function() {
console.log("success");
console.log(jqxhr);
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
// Perform other work here ...
// Set another completion function for the request above
jqxhr.always(function() {
console.log("second complete");
});
};
其次,我們選擇二實例代碼,改變我們的數據轉換爲選擇二可以處理的格式:
refreshServicesSelect = function() {
// ref: http://jsfiddle.net/RVnfn/2/
// ref2: http://jsfiddle.net/RVnfn/101/ # mine
// ref3: http://jsfiddle.net/RVnfn/102/ # also mine
console.log('refreshServicesSelect called');
$("#add-service-select-service").select2({
// allowClear: true
data: function() {
var arr = []; // container for the results we're returning to Select2 for display
for (var idx in services_raw) {
var item = services_raw[idx];
arr.push({
id: item.id,
text: item.name,
_raw: item // for convenience
});
}
return {results: arr};
}
});
};
下面是在HTML中選擇二元素應該是什麼樣子呼叫之前,上述功能:
<input id="add-service-select-service" type="hidden" style="width:100%">
要使用所有這一切,請致電(在JS):
window.fetchFromAPI();
window.refreshServicesSelect();
最後,這裏是一個JSFiddle,你可以用類似的東西玩:http://jsfiddle.net/RVnfn/102/
基本上,在我上面的例子中,我們只是使用ajax來填充等價物t在小提琴中的window.pills。
希望這有助於:)
請回復,如果你知道如何通過選擇二做到這一點阿賈克斯的功能,因爲這將是一個有點短。
這是選擇二V4.0.3:
我有同樣的問題,並通過觸發AJAX調用和使用的初始化數據陣列的數據返回了周圍。
// I used an onClick event to fire the AJAX, but this can be attached to any event.
// Ensure ajax call is done *ONCE* with the "one" method.
$('#mySelect').one('click', function(e) {
// Text to let user know data is being loaded for long requests.
$('#mySelect option:eq(0)').text('Data is being loaded...');
$.ajax({
type: 'POST',
url: '/RetrieveDropdownOptions',
data: {}, // Any data that is needed to pass to the controller
dataType: 'json',
success: function(returnedData) {
// Clear the notification text of the option.
$('#mySelect option:eq(0)').text('');
// Initialize the Select2 with the data returned from the AJAX.
$('#mySelect').select2({ data: returnedData });
// Open the Select2.
$('#mySelect').select2('open');
}
});
// Blur the select to register the text change of the option.
$(this).blur();
});
這對我的想法很有效。希望這有助於人們搜索相同的問題。
的選擇盒子是隱藏的,所以你不能點擊它。 – Bindrid
- 1. Select2無法加載遠程數據
- 2. Aurelia Select2,加載遠程數據不加載下一頁
- 3. 使用select2將遠程數據加載到輸入文本中
- 4. 使用Select2和Webservice加載遠程數據
- 5. 格式json用於加載遠程數據select2
- 6. Select2加載遠程數據示例不能正常工作
- 7. Select2加載默認值使用遠程數據的單選元素中的值
- 8. Select2預加載數據
- 9. Select2 - 動態加載數據
- 10. 使用Select2遠程加載設置默認選項
- 11. Select2 - 無限滾動無法加載下一頁與遠程數據
- 12. 使Select2只讀取一次數據
- 13. jQTouch加載遠程數據
- 14. Select2從數據庫加載數據 - CodeIgniter
- 15. 如何加載JSON數據以與select2插件一起使用
- 16. Django與Select2遠程數據示例
- 17. jQuery select2與遠程數據和asp.net
- 18. Select2:使用來自遠程數據的數組標記?
- 19. Select2載入遠程數據與佔位符下拉
- 20. 使用AJAX將基於JSON的遠程數據導入到Select2
- 21. jQuery Select2與遠程數據加載:顯示選項,而不是佔位符
- 22. 如何將遠程數據加載到select2並按標題搜索
- 23. 加載舊的數據庫一次又一次使用鈦
- 24. 如何使用select2加載對象數據數組
- 25. 在select2中重新加載數據
- 26. Select2 initSelection預加載數據不顯示
- 27. Java - 將數據加載到內存一次,並多次使用
- 28. 無法從遠程json加載數據
- 29. 從AngularJS指令加載遠程數據
- 30. select2 - 結合獲取遠程數據與多選和預數據
我不認爲'select2'中有任何內置選項,它給了你這種靈活性,唯一的方法就是根據是否早先調用ajax調用來控制ajax調用。這個控制應該在select2 – dreamweiver