use*_*463 5 javascript ajax jquery caching
我在全局缓存变量中使用jquery在JavaScript中维护缓存.
每当使用AJAX接收到新信息时,它都会被添加到缓存中.
如果它不在缓存中,我想从服务器AJAX它.
我想实现一个按需查询的函数,并像这样使用它:
$("#label").html(GetName("user123"));
Run Code Online (Sandbox Code Playgroud)
GetName()应该是这样的:
function GetName(username) {
if (Cache[username] != null) return Cache[username];
else
return QueryUsernameFromServer(username)
}
Run Code Online (Sandbox Code Playgroud)
QueryUsernameFromServer()应该是这样的:
function QueryUsernameFromServer (username) {
return $.ajax(…);
}
Run Code Online (Sandbox Code Playgroud)
但是,$ .ajax是异步的意思是它不能等待一个值(因此无法返回它).
强烈建议不要在同步模式下使用$ .ajax(浏览器挂起,它不支持JSONP),http://api.jquery.com/jQuery.ajax/
使用此方法,http://www.techfounder.net/2008/05/17/simple-javascript-cache/,方法需要回调.但是,不希望为每次使用创建回调.
有没有一种很好的方法在js和ajax中实现"按需缓存"功能而没有为每次使用提供专用的回调?
你需要进行回调,因为AJAX是......等待它......"A"同步.
只需向查询缓存的函数添加回调即可.这很简单:
function getName(username, callback){
if(cache[username]){
// cache hit, immediately invoke the callback
callback(cache[username]);
}else{
// assumes this query function updates the cache and invokes the
// 2nd parameter when it completes
queryUsernameFromServer(username, function(){
// invoke the callback now
callback(cache[username]);
});
}
}
Run Code Online (Sandbox Code Playgroud)
只需在代码中转换为异步样式:
之前:
var name = getName('jvenema');
Run Code Online (Sandbox Code Playgroud)
后:
getName('jvenema', function(name){
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |