jQuery-$.json可以调用另一个页面,也可以使用已经在当前页面上运行的查询



当前没有任何中断。:)我只是想获得一些表现

我有一个带有链式选择的表单(一个下拉列表更改,第二个下拉列表值更改)。现在,我的表单将对另一个页面执行ajax调用,并以json数据字符串的形式检索内容。这很快,但如果数据已经被检索(例如存储在内存中),则变化将是即时的,而不是轻微的延迟。我可以将此函数的调用更改为在页面中运行的函数吗?例如,jQueryAutocomplete可以做到这一点(查看源代码)。现在,当您更改操作系统的值时,型号列表将发生更改。如果我在内存中加载了modele,我需要对json字符串进行建模,以包括与操作系统相对应的选项。

换句话说,我可以创建json字符串并将其存储在内存中,然后只引用这些数据,而不是单独调用ajax吗?

function updateModels(i){
    var pltfrm = $(i).val();
    var firstOption = $(i);
    var model = firstOption.parent().next().find('.model');
    $.getJSON("index.cfm?do=misc.getModels&platform=" + pltfrm,
    function(j){
        var options = '';
        for (var i = 0; i < j.length; i++) 
        {
            options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
        }
    model.html(options);
    });
}

我的json数据是为LINUX OS:而临时格式化的

[
{"optionValue":"","optionDisplay":"Select a model"},
{"optionValue":"Dell 2850","optionDisplay":"Dell 2850"},
{"optionValue":"Dell 2950","optionDisplay":"Dell 2950"},
{"optionValue":"Dell 2970", "optionDisplay":"Dell 2970"},
{"optionValue":"Dell 6850", "optionDisplay":"Dell 6850"},
{"optionValue":"Dell R710", "optionDisplay":"Dell R710"}
]

这是非常低的优先级,但我知道这将有助于性能,因此如果您有时间并愿意与我合作,我将不胜感激。

当然,只需将数据保存在localStorage:中即可

function updateModels(i){
    var pltfrm = $(i).val();
    var firstOption = $(i);
    var model = firstOption.parent().next().find('.model');
    var storedItemSerialized = localStorage.getItem('model' + pltfrm), storedItem = {};
    var redrawModels = function (j)
    {
        var options = '';
        for (var i = 0; i < j.length; i++) 
        {
            options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
        }
        model.html(options);
    }

    if (storedItemSerialized)
    {
       redrawModels($.parseJSON(storedItemSerialized));
    }
    else
    {
      $.getJSON("index.cfm?do=misc.getModels&platform=" + pltfrm,
      function(j){
        localStorage.setItem('model' + pltfrm, JSON.stringify(j));
        redrawModels(j);
      });
    }
}

此方法还有通过页面请求保存数据的额外好处。

最新更新