所以我在这个函数中做了一个ajax调用,有点像这样:
function getCount() {
$.get("/People/getCount", function (data) {
if (data && data != "") {
// lots of code in here
}
我在另一个函数中正在做的是第二次调用:
function worldPeople() {
return $.get("/People/getCount", function (data) {
if (data != 0) {
var target = $("#worldNumbers").find("span");
target.html(data.length).digits();
}
})
}
所以我真的想避免再打第二次电话。有什么好方法可以避免这种情况吗?也许做一些链接等,重用第一个回调?我听说做几次电话是不好的做法。 此致
感谢所有回答的人。最后没有使用任何解决方案,我以另一种方式解决了它。我相信你给我的大部分例子都非常好。不知道如何接受答案。全部或全部接受?!谢谢!
答案 0 :(得分:2)
您可以创建一个简单的数据存储:
App.store = function () {
this.people = null;
this.count
loadPeople = function () {
if(this.people === null) {
$.get("/People/getCount", function (data) {
if (data != 0) {
this.count = (data.length).digits();
this.people = data;
}
}
};
}
答案 1 :(得分:1)
好吧,你可以将函数指针发送到执行$ .get
的函数基本上你会这样做:
function worldPeople() { getCountFromServer(function(data){ //do sth with data }); } function getCount() { getCountFromServer(function(data){ //do sth with data }); } function getCountFromServer(callback) { return $.get("/People/getCount", function (data) { if (data) callback(data); }); }
答案 2 :(得分:1)
隐藏地区的人们的商店数量怎么样?而不是在发送请求之前检查此字段。
答案 3 :(得分:1)
您可以通过使用某种缓存处理Ajax请求来实现此目的。我使用缓存来保存根据它调用的url检索的信息。如果另一个函数设置了相同的请求,则缓存将返回alraedy获取的数据。
您需要做的是检查数据是否已过时,以便在必要时重新提取。
答案 4 :(得分:1)
我通常使用缓存模块模式来处理这类事情:
// create a quick singleton to store cached data
var People = (function() {
// private variable to act as cache
var count;
// function to get cached data
// note: You have to assume it's always asynchronous
function getCount(callback) {
// have we loaded the data yet?
if (count===undefined) {
// cache miss: load the data, store it, do the callback
$.get("/People/getCount", function (data) {
count = data;
callback(data);
}
} else {
// cache hit - no need to reload
callback(count);
}
}
// provide access to the getter function
return {
getCount: getCount
};
}());
第一次点击缓存时,它会从服务器加载;第二次从私有变量加载。
// will load the data asynchronously
People.getCount(function(count) {
alert("First hit: " + count);
});
// will use the cached data
People.getCount(function(count) {
alert("Second hit: " + count);
});
根据您希望支持的复杂性,您可以添加其他功能,例如在特定时间间隔后使缓存过期,缓存多个调用(可能键入AJAX URL)等。我希望保持API简单而不是引用AJAX URL - 这样你的缓存就像一个抽象的服务层,你可以创建其他缓存实现来处理不同的数据源 - 对于在你实现服务器端AJAX处理程序之前删除数据之类的东西很有用。 p>