Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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 - Fatal编程技术网

Javascript 如何保存动态级联下拉列表的结果?

Javascript 如何保存动态级联下拉列表的结果?,javascript,Javascript,我有两个级联下拉列表,当页面加载时,数据加载到第一个DDL,当从该列表中选择项时,它将进入数据库并获取匹配项并填充第二个DDL。我希望避免在选择时两次访问DB。 例如,我正在加载汽车制造商的第一个DDL,然后单击丰田接下来发生的事情是它进入DB并获取所有丰田车型并填充第二个DDL,然后我选择不同的汽车制造商,同样的事情发生。现在,当我再次从第一个列表中选择Toyota时,它将不会进入DB,它将从以前的请求中提取数据 我想保留一个请求对象(比如字典),这样如果已经请求了项,它就不会返回数据库,而是

我有两个级联下拉列表,当页面加载时,数据加载到第一个DDL,当从该列表中选择项时,它将进入数据库并获取匹配项并填充第二个DDL。我希望避免在选择时两次访问DB。 例如,我正在加载汽车制造商的第一个DDL,然后单击丰田接下来发生的事情是它进入DB并获取所有丰田车型并填充第二个DDL,然后我选择不同的汽车制造商,同样的事情发生。现在,当我再次从第一个列表中选择Toyota时,它将不会进入DB,它将从以前的请求中提取数据


我想保留一个请求对象(比如字典),这样如果已经请求了项,它就不会返回数据库,而是使用本地保存的数据。

您可以通过Javascript中的本地存储来存储从服务器返回的列表。通过使用setItem()函数,如下所示

window.localStorage.setItem('Toyota', 'Models');
丰田是关键,车型是价值所在。还请注意,LocalStorage只能存储字符串

要存储数组或对象,必须将它们转换为字符串

为此,我们在传递给setItem()之前使用JSON.stringify()方法

现在,当您选择不同的汽车制造商时,请首先在LocalStorage对象中检查其值

它只接受一个作为键的参数,并以字符串形式返回值

要检索存储在上面的Toyota钥匙:

window.localStorage.getItem('Toyota');
这将返回一个值为的字符串

“{“1”:”Model-1”,”2”:”Model-2”}”
要使用此值,必须将其转换回对象

为此,我们使用JSON.parse()方法将JSON字符串转换为Javascript对象

JSON.parse(window.localStorage.getItem('Toyota'));
请记住检查您的浏览器是否支持本地存储

if (typeof(Storage) !== "undefined") {
  // Code for localStorage
} else {
  // No web storage Support.
}

如@Rahat Hameed所述,如果级联下拉值不经常更改,或者可以更改,例如(可以通过一些逻辑更新),则可以通过JavaScript执行此操作。然后,您可以使用它从数据库中获取这些值。

您可以使用Map()对象根据键存储数据。 查找更多信息:


它在大多数现代浏览器中都有支持。这方面的最佳教程是。

HTTP中已经存在缓存。我可能更愿意利用这一点,而不是创建自己的客户端JavaScript缓存……在启用HTTP缓存的策略之上,我还将数据保存在内存中,这样在页面的生命周期内,您就不需要对数据发出多个HTTP请求。
if (typeof(Storage) !== "undefined") {
  // Code for localStorage
} else {
  // No web storage Support.
}
var brandModelsList = new Map();
function getBrandModels(brand)
{
    if(brandModelsList.has(brand))
    {
        modelList =  JSON.parse(brandModelsList.get(brand));
        // Do stuff with second dropdown
    }
    //Your ajax stuff to get data
    $.ajax({
        url: 'server url',
        data: {name: brand},
        dataType: 'json',
    }).done(response => { 
        brandModelsList.set(brand, JSON.stringify(response));
        // Do stuff with second dropdown
    });
}