简体   繁体   English

jQuery递延和级联选择框

[英]JQuery Deferred & cascading select boxes

On page load I'm trying to populate select boxes. 在页面加载时,我试图填充选择框。 The URL to hit for data for #select2 depends on the value of #select1 . 命中#select2数据的URL取决于#select1的值。 As the first select box is also populated from data received from an Ajax call, I can't know in advance what the selected option will be on page load. 由于第一个选择框也是从Ajax调用接收的数据中填充的,因此我无法事先知道页面加载时所选的选项。 initData() is called on body load. initData()在身体负荷时调用。

I've tried the following, but in initData() selectOneValue is null when getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix'); 我尝试了以下操作,但是在initData()getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix');selectOneValuenull getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix'); is called. 叫做。

function initData() {
    initEnvs().then(function () {
        var selectOneValue= $('#select1').val();
        getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix');
    });
}

function initEnvs() {
    return $.Deferred(function (def) {
        getSelectData('#select1', someUrl);
        def.resolve();
    }).promise();
}

function getSelectData(selectId, urlFragment) {
    $.ajax({
        type: "GET",
        url: "/data/" + urlFragment,
        dataType: "json",

        success: function (data) {
            appendSelectOptions(selectId, data);
        },
        error: function (xhr) {
            //handle error
        }
    });
}

What am I doing wrong here? 我在这里做错了什么?

I've not tested this but this should work. 我没有测试过,但是应该可以。 Let me know if not. 让我知道是否。

function initData() {
    initEnvs().then(function () {
        var selectOneValue= $('#select1').val();
        console.log("============ 2");
        getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix').then(function(data){
          console.log("Are we here?");
          appendSelectOptions('#select2', data);
        });
    });
}

function initEnvs() {
    return $.Deferred(function (def) {
        getSelectData('#select1', someUrl).then(function(data){
            console.log(data);
            console.log("============");
            appendSelectOptions('#select1', data);
        });
        def.resolve();
    }).promise();
}

function getSelectData(selectId, urlFragment) {
    return $.Deferred(function (def) {      
      $.ajax({
        type: "GET",
        url: "/data/" + urlFragment,
        dataType: "json"
    });
     def.resolve();
   }).promise();   
}

initData();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM