2012-05-18 50 views
2

我已经为我的django应用程序设置了memcached(unix套接字)。但是,在memcached开启的时候,似乎有些Ajax请求无法正常工作。我在整个网站上使用memcached。django memcached和ajax请求

例如,在这个javascript函数中,​​指令第一次工作,但在此之后它保持从缓存中'提取'相同的页面。

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请求从数据库而不是缓存中重新加载?

编辑。

这是我settings.py中间件类

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

我正在使用memcached too.I找不到任何特定于ajax请求的问题。它是特定于某些浏览器? –

+0

不会。每个浏览器都会发生这种情况。即使在不同的电脑上。我粘贴我的'settings.py'' MIDDLEWARE'类 – xpanta

回答

1

看来答案比我想的要简单。我在django文档中找到了解决方案。

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): 
    # ... 

话虽如此,@亚历克斯的建议似乎有趣,我想尝试一下。但是现在我的服务器因为迁移原因而关闭。我需要等待几个小时。稍后我会在这里报告。

1

这是默认的浏览器的行为(缓存Ajax请求)。为了避免通addictional参数对您的请求:

url:'/place_bet/' + user + '/?ajax=&bet=' + bet+'&t='+new Date().getTime() 

编辑: 正确的URL加载是:

'/ob/' + user + '/?ajax=&t=' + new Date().getTime() 
+1

不,这是一个POST。浏览器不会缓存POST。 – Jordan

+1

我相信这是正确的想法,但在错误的路线。 '$('#user_open_bets')。load('/ ob /'+ user +'/?ajax =');'GET可能被缓存。 –

0

您是否尝试过加入PARAM

cache: false, 

你的Ajax请求?例如:

$.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 
});