2014-03-29 81 views
1

我有一些信息,我可以編輯,然後更新,然後我通過ajax得到更新的內容工作正常,但圖像獲取緩存,並沒有改變(圖像有相同的名稱,如果上傳新圖像,則會覆蓋前一個圖像)。jquery ajax緩存:假不工作

如果我然後刷新頁面,我看到新的圖像,如果我從那時起編輯和更新圖像,它的效果很好,但第一次總是問題。更新內容後,我總是必須手動進行頁面刷新。

我的ajax:

$.ajax({ 
    type: "POST", 
    async: true, 
    url: vkrwps_admin.ajax_url, 
    data: { 
     action: 'EDIT_PROD', 
     sv: sv, 
     preload: vkrwps_admin.preloader 
    }, 
    cache: false, 
    beforeSend: function() { 
     $('div.mule').html(u); 
    }, 
    success: function(response) { 
     $('div.mule').html(response); 
     // call chosen on select 
     $('select').chosen({ 
      // placeholder_text: "Choose a product..." 
      'disable_search': true 
     }); 
     // $('select.dropsearch').val(4).trigger('change'); 
    }, 
    complete: function() { 
     // $('select.dropsearch').one().val(cf).trigger('change'); 
    } 
}); 

我也試圖把對劇本的頂部以下,但並沒有幫助:

$.ajaxSetup({ cache: false }); 

回答

1

這不是ajax所有需要緩存清除的響應,它是圖像,它已在服務器上更新,但您仍在加載相同的URL,因此它不會在客戶端更新。

嘗試添加一個隨機的查詢字符串的圖像,再次加載圖像,在阿賈克斯成功函數做

 success: function(response){ 
      var r = (new Date()).getTime(); 

      $('div.mule').html(response).find('img').prop('src', function(_, src) { 
       return src + '?v=' + r; 
      }); 

      $('select').chosen({ 
       // placeholder_text: "Choose a product..." 
       'disable_search': true 
      }); 
      // $('select.dropsearch').val(4).trigger('change'); 
     }, 
+0

謝謝。爲什麼你有'_'這個下劃線作爲'prop'回調函數的第一個參數? –

+0

@OlliccaMindstorm - 爲了得到第二個參數,我們需要實際上有第一個參數,它是一個索引,並且在代碼中不需要,所以我傾向於使用下劃線來表明它沒有被使用,但是必須在那裏鍵入內容,爲什麼不是下劃線。任何字符或變量名都會起作用,這只是一種習慣。 – adeneo

1

嘗試這樣的:

$.ajaxSetup({ 
    type: 'POST', 
    headers: { "cache-control": "no-cache" } 
}); 

您可以在the question中找到更多解決方案。

+0

你救了我! –