-1

我正在尝试编写一个代码,它可以确定本地存储中是否存在静态数据,而不是不调用 ajax 方法从服务器获取数据,否则它应该调用 ajax api 并将结果存储在本地存储中并将数据返回给它的调用方法。

这是我的代码:

staticService = function (key) {
       return $.ajax({
            type: 'GET',
            url: "xxxxx.ashx/" + key,
            dataType: "json",
            success: function(result){
               store.save(key, result);
            }
        });
    }

var getFromStore = function (key)
{
    if (key) {
        var result = store.fetch(key);
        if (!result) {
            staticService(key);                 
        }
        return result;
    }
}

var staticdata = {
 gender: [{value:"M",text:"Male"}, {value:"F",text:"Female"}],
 maritalStatus: getFromStore('availableMaritalStatus')

};

问题:ajax 调用是异步的,每当我传递那些不在存储中的键时,它都会返回 null,但是它用于 ajax 调用并将数据存储在 localStorage 中。我需要类似的东西

{
check list from store if exists return the list otherwise call ajax, get the list,        store it in localStorage and return to user but without blocking UI
}

如何通过更改代码来实现这一点?最好的做法是什么?

编辑:如何更改 staticdata 变量逻辑,以便我得到 staticdata.maritalStatus 有效数据而不是 null。我正在加载应用程序负载的静态数据。如果我尝试调用 getFromStore 的次数,我不知道我什么时候会从服务器接收数据,因为这将调用大量的成功回调。我希望在所有静态服务成功返回数据时调用静态数据。

4

1 回答 1

0

result为空,因为您无法从异步 ajax 查询返回数据。最好的方法是在查询“成功”时执行回调函数并在 arg 中传递返回值。像那样 :

staticService = function (key) {
       return $.ajax({
            type: 'GET',
            url: "xxxxx.ashx/" + key,
            dataType: "json",
            success: function(data) {
               store.save(key, data);
               callbackFunction(data); // Here you can call a callback function that will use your return value
            }
        });
}
于 2013-10-30T12:29:31.250 回答