jquerymultiple-select在枚举之前的select时使ajax加载
我已经简化了这一点来解释 如果我有多个独立的选择,让我们以简单的乡村城镇地区为例 第一个选择加载国家,第二个选择加载与国家选定值相关的城镇,第三个选择加载与城镇选定值相关的区域 我不想将async设置为falsejquerymultiple-select在枚举之前的select时使ajax加载,jquery,html,ajax,select,Jquery,Html,Ajax,Select,我已经简化了这一点来解释 如果我有多个独立的选择,让我们以简单的乡村城镇地区为例 第一个选择加载国家,第二个选择加载与国家选定值相关的城镇,第三个选择加载与城镇选定值相关的区域 我不想将async设置为false $(document).ready(function () { // Enumerate select lists // Country is already filled enumerateChildDropDown("Town", $("Country")
$(document).ready(function () {
// Enumerate select lists
// Country is already filled
enumerateChildDropDown("Town", $("Country").val());
// This shouldnt load until the above has finished
enumerateChildDropDown("region", $("Town").val());
// Note there could be many more of these
});
function enumerateChildDropDown(selectId, parentId) {
$.ajax({
type: "POST",
dataType: "json",
url: "@Url.Action("foo", "foo")",
data: { parentId: parentId},
}).done(function (returnedData) {
// Fill selectId here etc
}).fail(function (jqXHR, exception) {
// Some Alert
});
}
这个例子已经大大简化了,因为真正的应用程序向每个select加载了大量数据,并且有多达10多个依赖字段,因此使用了一个ajax函数
我已经研究过使用某种类型的回调,但我发现JQuery版本的不同示例让人有点困惑。我想坚持使用JQuery,不使用任何其他库,如knockoutjs。您可以使用回调、延迟或承诺。甚至可以通过将
async
设置为false
(默认设置为true
)来同步jQuery的AJAX
如果您想坚持使用jqueryasync,那么我建议您看看这里:
从示例中可以看出:
var div = $( "<div />" );
div.promise().done(function( arg1 ) {
// will fire right away and alert "true"
alert( this === div && arg1 === div );
});
var div=$(“”);
div.promise().done(函数(arg1){
//将立即开火并发出“真实”警报
警报(此===div&&arg1===div);
});
这就是我一直在寻找的东西
可能您已经知道此信息,但如果您不知道,问题不是实际创建下拉列表,而是让子列表等待父列表完成加载,而不设置async:false。为什么要在没有任何原因或解释的情况下进行向下投票?