JQuery Deferred&级联选择框

时间:2018-02-08 13:13:41

标签: javascript jquery jquery-deferred

在页面加载时,我尝试填充选择框。要为#select2的数据点击的网址取决于#select1的值。由于第一个选择框也是从Ajax调用收到的数据中填充的,因此我无法事先知道所选选项在页面加载时会是什么。在身体负荷上调用initData()

我已尝试过以下操作,但在调用initData()selectOneValue null getSelectData('#select2', 'urlBase/' + selectOneValue + '/urlSuffix');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 } }); }

2018-02-08 13:07:05 +0000 [warn]: pattern not match: "192.168.6.121 - - [08/Feb/2018:18:37:05 +0530] \"POST /shorten HTTP/1.1\" 200 496 \"-\" \"-\" 6"

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我没有对此进行过测试,但这应该可行。如果没有,请告诉我。

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();
相关问题