javascript - 是否有推荐的通用模式来内存 ajax 调用?

标签 javascript jquery memoization

我正在处理通过 Socrata's 发布的一些政府数据SODA api .

此 API 提供了一种通过 REST 调用检索行的方法。 API 允许对查询进行有限的参数化——基本上您可以进行全文搜索,除此之外别无他法。我找不到调整返回数据的方法——例如只返回数据的某些列。

这样一来,基本上我只能得到每个数据 View 的所有行和所有列。这没问题,我想,但我想缓存它 - memoize it 以使用下划线术语。

是否有使用 jQuery 内存 ajax 调用的模式?


编辑:为了让您了解我在说什么,下面是我目前正在做的事情。

function onclick(event) {
    var $t = $(event.currentTarget);
    var itemId = $t.attr('data-itemid');
    var url = getRestUrl(itemId);
    if (typeof datacache[itemId] === "undefined") {
        $.ajax({
            url       : url,
            cache     : true,
            type      : "GET",
            dataType  : "json",
            error     : function(xhr,status,error) {
                raiseError(error);
            },
            success   : function(response, arg2, xhr) {
                datacache[itemId] = response;
                doSomethingWithTheData(url, itemId);
            }});
    }
    else {
        doSomethingWithTheData(url, itemId);
    }
}

// then, doSomethingWithTheData() simply references datacache[itemId]

似乎更快,虽然我没有测量过它。我真正想知道的是,是否有一种通用模式可以做这样的事情,我可以使用它,以便每个阅读代码的人都能立即看到我在做什么?

最佳答案

您也许可以做一些类似自动完成查找的事情(这主要是靠内存,但您会明白的):

var searchCache = {}, searchXhr = null;

function Search(term) {

    if (term in searchCache) {
        return doSomethingWithTheData(searchCache[term]);
    }

    if (searchXhr != null) {
        searchXhr.abort();
    }

    searchXhr = $.ajax({
        url       : url,
        cache     : true,
        type      : "GET",
        dataType  : "json",
        error     : function(xhr, status, error) {
            raiseError(error);
        },
        success   : function(response, arg2, xhr) {
            searchCache[term] = response;
            if (xhr == searchXhr) {
                doSomethingWithTheData(response);
                searchXhr = null;
            }
        }
    });

}

关于javascript - 是否有推荐的通用模式来内存 ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801008/

相关文章:

jQuery memoize css 用于悬停效果

javascript - 有没有一种方法可以在组件上传播 Prop 而不覆盖指定的属性?

javascript - 即使切换它时,hasClass 也始终返回 false

javascript - Jquery 无法识别菜单包括

c# - 将字符串(带有 UTC)转换为日期时间

python-3.x - Python : recall cached function result dependent on new function parameter

javascript - 用 php 中的本地代理替换 whateverorigin.org 调用

php - 每页有多个表单的 jQuery forms.js

jquery - 在特定点显示div(下拉菜单样式),跨浏览器,跨分辨率

python - 在对象中存储计算值