Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquerymultiple-select在枚举之前的select时使ajax加载_Jquery_Html_Ajax_Select - Fatal编程技术网

jquerymultiple-select在枚举之前的select时使ajax加载

jquerymultiple-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")

我已经简化了这一点来解释

如果我有多个独立的选择,让我们以简单的乡村城镇地区为例

第一个选择加载国家,第二个选择加载与国家选定值相关的城镇,第三个选择加载与城镇选定值相关的区域

我不想将async设置为false

$(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。为什么要在没有任何原因或解释的情况下进行向下投票?