我为我的django应用程序设置了memcached(unix socket)。但是,当memcached启用时,似乎某些ajax请求无法正常工作。我在整个网站上使用memcached。
例如,在这个javascript函数中,.load()
指令第一次工作,但之后它继续从缓存中“获取”同一页面。
function placeBet(user, bet) {
var ajax_data = {
status:false,
message: ''
}
$.ajax({
url:'/place_bet/' + user + '/?ajax=&bet=' + bet,
type:"POST",
dataType:"json",
data:ajax_data,
success:function (data){
var message = "";
$('#user_open_bets').load('/ob/' + user + '/?ajax=');
if (data.status == false){
alert(data.message);
}
} // success
}); // ajax
}
如何强制将这些ajax请求从数据库重新加载而不是从缓存中重新加载?
EDIT。
这是我的settings.py
MIDDLEWARE类
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'main.common.tz_middleware.TimezoneMiddleware',
'main.common.sslMiddleware.SSLRedirect',
'django.middleware.cache.FetchFromCacheMiddleware',
答案 0 :(得分:1)
这是默认的浏览器行为(缓存ajax请求)。为了避免在您的请求中传递其他参数:
url:'/place_bet/' + user + '/?ajax=&bet=' + bet+'&t='+new Date().getTime()
编辑: 正确加载的网址是:
'/ob/' + user + '/?ajax=&t=' + new Date().getTime()
答案 1 :(得分:1)
似乎答案比我想象的要简单。我在django docs中找到了解决方案。
https://docs.djangoproject.com/en/dev/topics/cache/#controlling-cache-using-other-headers
我复制粘贴(供其他人知道)
from django.views.decorators.cache import never_cache
@never_cache
def myview(request):
# ...
话虽如此,@ Alex的建议似乎很有趣,我想尝试一下。但是现在我的服务器由于迁移原因而关闭。我需要等几个小时。我稍后会在这里报告。
答案 2 :(得分:0)
您是否尝试过添加参数
cache: false,
你的ajax请求? Forexample:
$.ajax({
url:'/place_bet/' + user + '/?ajax=&bet=' + bet,
type:"POST",
dataType:"json",
data:ajax_data,
cache: false,
success:function (data){
var message = "";
$('#user_open_bets').load('/ob/' + user + '/?ajax=');
if (data.status == false){
alert(data.message);
}
} // success
});