2

djangoアプリケーション用にmemcached(unixソケット)をセットアップしました。ただし、me​​mcachedがオンになっている間は、一部の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リクエストをキャッシュからではなくデータベースからリロードするように強制するにはどうすればよいですか?

編集。

これは私の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',
4

3 に答える 3

1

これはデフォルトのブラウザの動作です(ajaxリクエストのキャッシュ)。それを回避するには、中毒性のあるパラメーターをリクエストに渡します。

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

編集:ロードする正しいURLは次のとおりです:

'/ob/' + user + '/?ajax=&t=' + new Date().getTime() 
于 2012-05-18T12:23:13.473 に答える
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):
    # ...

そうは言っても、@ Alexの提案は面白そうなので、試してみたいと思います。ただし、移行の理由でサーバーがダウンしています。数時間待つ必要があります。後でここで報告します。

于 2012-05-18T12:43:18.913 に答える
0

パラメータを追加してみましたか

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
});
于 2012-05-18T12:26:48.477 に答える