我正在处理通过 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/