我正在使用jsonresult列出一个国家/地区下的所有城市。我从数据库中检索数据并使用jquery将其加载到下拉列表中。问题是,如果城市超过3000,那么jsonresult就不起作用了。
<script type="text/javascript">
$(document).ready(function () {
//Hook onto the MakeID list's onchange event
$("#Country").change(function () {
//build the request url
$("#HomeTown").empty();
var url = '<%= Url.Content("~/") %>' + "Location/GetCitiesByCountry/" + $("#Country").val();
$.getJSON(url, function (data) {
$.each(data, function (index, optionData) {
$("#HomeTown").append("<option value='" + optionData.geonameid + "'>" + optionData.asciiname + "</option>");
});
$("#HomeTown").option[0].selected = true;
});
}).change();
});
</script>
答案 0 :(得分:1)
我同意@Ken。您可以做的是逐步加载数据。
所以你可以加载第一个说500,而那些显示你可以使用jQuery加载下一个500。
或者,你需要对此进行研究,你可能会得到一个jQuery下拉菜单,当你点击下拉列表的底部时,它可以让你回复。
但我认为最好的选择是尝试限制下拉列表中的数据量。
答案 1 :(得分:1)
下拉列表中的项目过多。
限制项目,或考虑使用其他控件 - 例如AutoComplete控件。
答案 2 :(得分:0)
3000是一个非常大的数字。您应该考虑与服务器进行某种ajax交互,以根据需要对结果进行分页。类似于jQuery DataTables plugin(或任何数量的类似选项,如所讨论的here)应该会给你一个良好的开端。其中一些可以简化,以便它们只是一个下拉列表,可视化 - 但使用服务器端分页。
答案 3 :(得分:0)
http://forums.asp.net/p/1090853/1634922.aspx此链接讨论了json序列化中超出的最大长度错误。显然你可以在web.config中增加最大大小。
答案 4 :(得分:0)
除了加载速度慢或崩溃的可能性之外,从用户体验的角度来看,网页中的3000项列表是一种糟糕的设计。想象一下打开下拉列表时页面的大小。我不可能回到一个给我这么大的列表供选择的网站。
不要在列表中包含整个3000个城市,而是想办法对其进行分页。根据城市的位置(国家/州/省)或名称(字母顺序)或对您的应用有意义的任何标准对城市进行分类。