Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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
Javascript 页面加载时的订阅值_Javascript_Jquery_Json_Ajax_Knockout.js - Fatal编程技术网

Javascript 页面加载时的订阅值

Javascript 页面加载时的订阅值,javascript,jquery,json,ajax,knockout.js,Javascript,Jquery,Json,Ajax,Knockout.js,我有两个ajax调用。一个用于在第一个下拉列表中加载发布周期,另一个用于在第二个下拉列表中加载场景。第二个下拉列表中的场景对应于第一个下拉列表中选择的值。我无法在页面加载时同时加载这两个文件。我必须通过单击第一个下拉列表中的一个选项来选择该值,只有在第二个下拉列表中的选项被加载之后。如何在页面加载时实现此功能,而不是通过手动选择或触发该事件。。我不希望使用ko处理程序。提前谢谢你的帮助 //load release cycles in first dropdown self.pushReleas

我有两个ajax调用。一个用于在第一个下拉列表中加载发布周期,另一个用于在第二个下拉列表中加载场景。第二个下拉列表中的场景对应于第一个下拉列表中选择的值。我无法在页面加载时同时加载这两个文件。我必须通过单击第一个下拉列表中的一个选项来选择该值,只有在第二个下拉列表中的选项被加载之后。如何在页面加载时实现此功能,而不是通过手动选择或触发该事件。。我不希望使用ko处理程序。提前谢谢你的帮助

//load release cycles in first dropdown
self.pushReleaseCycles = function(releaseCycleUrl,scenarioNameUrl1,scenarioNameUrl2){
    $.ajax({
        url: sharepointScenarioListUrl + releaseCycleUrl,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            var items = data.d.results;
            items.forEach( function(item) { 
                if (self.release_cycles.indexOf(item.Release_x0020_Cycle) == -1) { 

                    self.release_cycles.push(item.Release_x0020_Cycle);
                }
            });

            self.selectedCycle.subscribe(function(value) {
                self.scenarios([]);
                        self.pushScenariosToDropdown(value,scenarioNameUrl1,scenarioNameUrl2);
            });
        },
        error: function (data) { 
            alert("ERROR in function pushReleaseCycles : " + data);console.log(data);
        }
    });
};

//load scenarios in second dropdown
self.pushScenariosToDropdown = function(value,scenarioNameUrl1,scenarioNameUrl2){
    $.ajax( {
        url: sharepointScenarioListUrl + scenarioNameUrl1 + value + scenarioNameUrl2,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            var items = data.d.results;
            items.forEach( function(item) { 
                self.scenarios.push(new ScenarioModel(item));
                console.log(data);
            });
            self.selectedScenario.subscribe(function(value) {
                dbName = ko.toJSON(value.title);
                jarFile1 = ko.toJSON(value.jar);
                fdMimoAvailable = ko.toJSON(value.fdmimo);
                self.setValues(dbName,jarFile1,fdMimoAvailable); 
            });
        },
        error: function (data) { 
            alert("ERROR in function pushScenariosToDropdown: " + data);console.log(data);
        }
    });
};
我的HTML:

<select id="dropdown" required class="form-control select2" data-bind="options: release_cycles,value:selectedCycle">
</select>

<select id="dropdown2" required="required" class="form-control select2" data-bind="options: scenarios, optionsText:'scenarioName',optionsCaption:'Please Select Scenario', value:selectedScenario,validationOptions: { errorElementClass:'input-validation-error' },selectedOptions: chosenScenario">
</select>

如果您不想根据第一个选择框的值从服务器检索第二个选择框的值,而是想加载整个数据集,那么只需加载第二个选择框的所有选项的json对象,然后在第一次选择后解析它。但是,如果数据量很大,则会影响性能。

如果您不想根据第一个选择框的值从服务器检索第二个选择框的值,而是想加载整个数据集,然后只需为第二个框加载一个包含所有选项的json对象,然后在第一次选择之后解析它。但是,如果数据量很大,则会影响性能。

我处理此问题的方法是更改从服务器提取数据的方式。您需要包含页面所需的整个菜单结构。在我看来,有一个稍微长一点的负载比一个颠簸的经历要好。下面是一个嵌套菜单的示例,以及它的外观

函数视图模型{ var self=这个; self.Dropdown1=ko.array; self.SelectedItem1=ko.observable; self.Dropdown2=ko.computedfunction{ 如果self.SelectedItem1==null{ 返回[]; }; console.logko.toJSself.SelectedItem1 返回self.SelectedItem1.com子菜单; }; self.SelectedItem2=ko.observable; self.LoadDropDown=函数{ self.Dropdown1.push{ 姓名:帽子, 价值:顶部, 子菜单:[{ 姓名:蓝色, 价值:0000FF }, { 姓名:格林, 价值:00FF00 }, { 姓名:瑞德,, 价值:FF0000 } ] }; self.Dropdown1.push{ 姓名:衬衫, 价值:中等, 子菜单:[{ 姓名:条纹, 值:条带化 }, { 名称:Logo, 价值:标志 }, { 名称:平原, 价值:无 } ] }; self.Dropdown1.push{ 名称:裤子, 值:底部, 子菜单:[{ 名称:牛仔裤, 价值:牛仔裤 }, { 姓名:卡基斯, 价值:卡基斯 }, { 姓名:科德罗, 价值:科德罗 } ] }; } 自加载下拉列表; } ko.applybindingsnewviewmodel;
我处理这个问题的方法是更改从服务器提取数据的方式。您需要包含页面所需的整个菜单结构。在我看来,有一个稍微长一点的负载比一个颠簸的经历要好。下面是一个嵌套菜单的示例,以及它的外观

函数视图模型{ var self=这个; self.Dropdown1=ko.array; self.SelectedItem1=ko.observable; self.Dropdown2=ko.computedfunction{ 如果self.SelectedItem1==null{ 返回[]; }; console.logko.toJSself.SelectedItem1 返回self.SelectedItem1.com子菜单; }; self.SelectedItem2=ko.observable; self.LoadDropDown=函数{ self.Dropdown1.push{ 姓名:帽子, 价值:顶部, 子菜单:[{ 姓名:蓝色, 价值:0000FF }, { 姓名:格林, 价值:00FF00 }, { 姓名:瑞德,, 价值:FF0000 } ] }; self.Dropdown1.push{ 姓名:衬衫, 价值:中等, 子菜单:[{ 姓名:条纹, 值:条带化 }, { 名称:Logo, 价值:标志 }, { 名称:平原, 价值:无 } ] }; self.Dropdown1.push{ 名称:裤子, 值:底部, 子菜单:[{ 名称:牛仔裤, 价值:牛仔裤 }, { 姓名:卡基斯, 价值:卡基斯 }, { 姓名:科德罗, 价值:科德罗 } ] }; } 自加载下拉列表; } ko.applybindingsnewviewmodel;
这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-事实上,它确实提供了一个答案。OP想知道如何做到这一点。我提供了一个答案。OP似乎并没有特别要求代码,而是更类似于best method的东西。这并没有提供问题的答案。要评论或要求作者澄清,请在下面留下评论
他们的职位事实上,它确实提供了一个答案。OP想知道如何做到这一点。我提供了一个答案。OP似乎并没有特别要求代码,而是更类似于best method的东西。