Принудительный вызов ajax для очистки кэша - PullRequest
5 голосов
/ 30 октября 2010

У меня есть смс, в которой я могу изменить положение объектов.После каждой смены позиции ajax call обновляет весь список объектов.Но, к сожалению, некоторые данные хранятся в кеше, и никаких изменений не видно.Есть ли способ принудительно очистить кеш с помощью javascript / request / other?Я пробовал 'cache: false' в $.ajax, но он не работает.

Вот пример страницы:

http://ntt.vipserv.org/manage/playforward

И мой js:

$(".object-position").livequery("change", function() {
    $("#objects-list input").attr('disabled', true);
    var action = $(this).attr('name');
    var position = $(this).attr('value');
    var id = $(this).attr("id");
    var model = id.split("-")[0];
    var object_id = id.split("-")[1];

    $("#loader").show();
    $("#loader").fadeIn(200);

    $.ajax({
        type: "POST",
        async: true,
        url: "/manage/update_position/",
        data: "action=" + action + "&model=" + model + "&object_id=" + object_id + "&position=" + position,
        dataType: "json",
        success: function(data){
            $("#loader").fadeOut("fast", function () {
                $("#loader").hide();
            });
            $("objects-list").html(data["html"]);
            $("#message").show();
            $("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
            setTimeout(function(){
                $("#message").fadeOut("slow", function () {
                    $("#message").hide();
                });
            }, 1500); 
        }
    });
    $("#objects-list input").attr("disabled", false);
    return false;
});

Ответы [ 3 ]

14 голосов
/ 30 октября 2010

Что делает cache: false, так это добавляет время к данным запроса, чтобы каждый запрос был уникальным и поэтому обходил кеш браузера.Интересно, вызывает ли проблема тот факт, что вы используете строку данных, а не объект?Попробуйте вместо этого использовать объект:

$.ajax({
    type: "POST",
    async: true,
    url: "/manage/update_position/",
    data: {
        "action": action.
        "model": model,
        "object_id": object_id,
        "position": position
    },
    cache: false,
    dataType: "json",
    success: function(data){
        //[snip]
    }
});
7 голосов
/ 30 октября 2010

Просто замените

url: "/manage/update_position/",

с

url: "/manage/update_position/?nocache="+Math.random(),

для принудительной перезагрузки страницы без использования кеша браузера.

2 голосов
/ 30 октября 2010

У вас есть

$("objects-list").html(data["html"]);

Попробуйте вместо этого:

$(".objects-list").html(data["html"]); // forgot leading dot?

Кроме того, похоже, что вы пытаетесь заменить содержимое таблицы .objects-list некоторым HTMLвключает в себя сам элемент <table>.Таким образом, у вас будет <table...><table...> и т. Д. После замены контента .html().

...