用JavaScript

时间:2017-11-21 20:27:12

标签: javascript jquery json ajax

我的网站脚本填充了下拉菜单,并从custom.js文件运行。我从教程拼凑起来,它的工作原理。除了一件事,我对此感到非常满意。我必须在脚本中嵌入各种级别的菜单。只有这一个功能是300行,几乎所有菜单。我也想在其他地方使用相同的信息,所以我已经将各个级别重写为json文件。我想要的只是能够在服务器上打开一个json文件并通过相同的逻辑运行它。我觉得我很接近,看着Ajax和jQuery,但JavaScript对我来说很陌生,但我不能把它拼凑起来。我希望有人可以帮助我,或者至少给我一个正确方向的努力。

// Function auto populates dropdown menus. Takes in
// s1 and populates dropdown based on selection
function populatemenu(s1, s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    if(s1.value == "animal") {
        var optionArray = ["|",
                           "dog|Dog",
                           "cat|Cat",];
    } else if(s1.value == "vegetable") {
        var optionArray = ["|",
                           "carrots|Carrots",
                           "peas|Peas",];
    }   for(var option in optionArray) {
            var pair = optionArray[option].split("|");
            var newOption = document.createElement("option");
            newOption.value = pair[0];
            newOption.innerHTML = pair[1];
            s2.options.add(newOption);
    }
}

// I think this is close?
function populatesitetest(s1, s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    $(function(){
        $.getJSON("/menu_data.json", function(jsdata) {
        jsonObj = jsdata;
        console.log(jsonObj);
        });
    });
        var optionArray = jsonObj[s1.value]
        for(var option in optionArray) {
            var pair = optionArray[option].split("|");
            var newOption = document.createElement("option");
            newOption.value = pair[0];
            newOption.innerHTML = pair[1];
            s2.options.add(newOption);
        }
    }

1 个答案:

答案 0 :(得分:1)

你需要在加载ajax json时使用数据,这对于简化异步数据连接至关重要,为此进行更改:

// s1并根据选择填充下拉列表

function populatemenu(s1, s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    if(s1.value == "animal") {
        var optionArray = ["|",
                           "dog|Dog",
                           "cat|Cat",];
    } else if(s1.value == "vegetable") {
        var optionArray = ["|",
                           "carrots|Carrots",
                           "peas|Peas",];
    }   for(var option in optionArray) {
            var pair = optionArray[option].split("|");
            var newOption = document.createElement("option");
            newOption.value = pair[0];
            newOption.innerHTML = pair[1];
            s2.options.add(newOption);
    }
}

// I think this is close?
function populatesitetest(s1, s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    $(function(){
        $.getJSON("/menu_data.json", function(jsdata) {
        jsonObj = jsdata;
        console.log(jsonObj);
 var optionArray = jsonObj[s1.value]
        for(var option in optionArray) {
            var pair = optionArray[option].split("|");
            var newOption = document.createElement("option");
            newOption.value = pair[0];
            newOption.innerHTML = pair[1];
            s2.options.add(newOption);
        }
        });
    });

    }