2010-10-30 15 views
5

Tôi có một cm, trong đó tôi có thể thay đổi vị trí của đối tượng. Sau mỗi vị trí, cuộc gọi ajax sẽ cập nhật toàn bộ danh sách các đối tượng. Nhưng tiếc là một số dữ liệu được lưu trữ trong bộ nhớ cache và không có thay đổi nào hiển thị. Có cách nào để buộc xóa bộ nhớ cache với javascript/yêu cầu/khác? Tôi đã thử 'cache: false' trong $.ajax nhưng nó không hoạt động.Gọi ajax để xóa bộ nhớ cache

Dưới đây là một trang mẫu:

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

Và js của tôi:

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

Trả lời

2

Bạn có

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

Hãy thử điều này thay vì:

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

Ngoài ra, có vẻ như bạn đang cố gắng để thay thế nội dung của bảng .objects-list với một số html trong đó bao gồm các yếu tố tự <table> . Vì vậy, bạn có <table...><table...>, v.v., sau khi thay thế nội dung .html().

13

cache: false làm là thêm thời gian để các dữ liệu yêu cầu, vì vậy mỗi yêu cầu là một cách hiệu quả độc đáo và do đó bỏ qua bộ nhớ cache của trình duyệt. Tôi tự hỏi nếu thực tế là bạn đang sử dụng một chuỗi dữ liệu chứ không phải là một đối tượng đang gây ra vấn đề ở đây. Hãy thử sử dụng một đối tượng thay vì:

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

Tôi xác nhận - điều này thực sự hiệu quả. cache: false thêm dấu thời gian vào url và nhờ đó, mọi nội dung mới đều được tải. – alekwisnia

4

Chỉ cần thay thế

url: "/manage/update_position/", 

với

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

để buộc tải lại trang không sử dụng bộ nhớ cache của trình duyệt.

+1

Điều đó có thể dễ dàng bỏ qua một hệ thống định tuyến. Nếu bạn định làm điều này theo cách thủ công, hãy đặt nó thành tham số yêu cầu thay vào đó: '"/manage/update_position /? Nocache = "+ Math.random()' – lonesomeday

+0

Vâng, bạn hoàn toàn đúng. Tôi quên bao gồm một '"? "' Trong bài viết gốc của tôi. Nó phải là: '"/manage/update_position /? "+ Math.random(),' – remi