YSlow dan alat pengembang Chrome akan memperingatkan Anda jika Anda menggunakan permintaan POST untuk AJAX - umumnya GET harus menjadi metode yang disukai kecuali Anda benar-benar perlu POST.
Anda dapat menonaktifkan caching secara global $.ajaxSetup(), misalnya:
$.ajaxSetup({ cache:false});
Ini menambahkan stempel waktu ke querystring saat mengajukan permintaan. Untuk mematikan cache untuk $.ajax()panggilan tertentu , aktifkan cache: falsesecara lokal, seperti ini:
Seandainya saya akan melihat item pengaturan global ini sebelumnya. Baru saja menyelamatkan saya dari keharusan memperbarui puluhan panggilan individual.
James Skemp
2
Saya tahu ini adalah jawaban lama, hanya ingin tahu apakah ini memengaruhi semua panggilan ajax seperti (ajax, dapatkan dan kirim) atau hanya panggilan ajax tertentu?
Lumpy
6
@Lumpy, menurut dokumentasi jQuery.ajax () , cache: falsehanya akan berfungsi dengan benar dengan permintaan HEAD dan GET. Juga, jika Anda menetapkan cache: falsedi $.ajaxSetup, menurut jQuery.ajaxSetup () dokumentasi , itu akan "nilai-nilai default set untuk permintaan masa depan Ajax." Jadi ya, itu akan menonaktifkan cache untuk semua permintaan HEAD dan GET AJAX mendatang.
John Washam
11
Kata hati-hati: ini menambahkan "? _ = Somenumber" ke URL Anda. Pastikan ujung belakang Anda dapat mengabaikan "_" di parameter kueri URL.
4
+1 untuk cache: false. Menonaktifkan caching secara global sepertinya berlebihan, tetapi memiliki kontrol per permintaan adalah sempurna. Terima kasih
Lewat Coding
21
Jika Anda mengatur parameter unik, maka cache tidak berfungsi, misalnya:
$.ajax({
url :"my_url",
data :{'uniq_param':(newDate()).getTime(),//other data}});
Itulah yang cachesudah dilakukan parameter di belakang layar.
Jose Rui Santos
Kode ajaxSetup di atas tidak bekerja untuk saya, tidak menghabiskan banyak waktu untuk mencari tahu mengapa. Variabel global buruk, dan terkadang Anda ingin melakukan cache. Jawaban ini yang terbaik menurut saya.
bladefist
@bladefist Anda sepertinya telah mengenai masalah yang sama dengan saya. Apakah Anda tahu jika ada opsi lain selain mengubah data untuk membuat IE menghentikan caching? Alasan saya bertanya adalah karena permintaan saya sebenarnya tidak menggunakan 'data' dan semua data disertai dengan URL.
badri
1
Sebenarnya, inilah yang seharusnya dilakukan cache di belakang layar sesuai informasi ini dari - api.jquery.com/jquery.ajax cache (default: true, false untuk dataType 'script' dan 'jsonp') Jenis: Boolean Jika disetel ke false, itu akan memaksa halaman yang diminta untuk tidak di-cache oleh browser. Catatan: Mengatur cache ke false hanya akan berfungsi dengan benar dengan permintaan HEAD dan GET. Ini bekerja dengan menambahkan "_ = {timestamp}" ke parameter GET.
badri
@bladefist Jelas mengatakan bahwa itu akan menambahkan stempel waktu ke parade GET. jadi ingin tahu mengapa kode yang disediakan oleh Koss bekerja untuk Anda dan menonaktifkan cache lokal atau global tidak?
badri
12
Cache-Control:no-cache,no-store
Kedua nilai header ini dapat digabungkan untuk mendapatkan efek yang diperlukan baik pada IE maupun Firefox
Masalahnya adalah bahwa IE tidak selalu mendengarkan ini, sayangnya :)
Nick Craver
1
@Nick, apakah itu yakin? saya tidak menguji Kontrol Cache ini. Apakah Jquery Ajax chache berfungsi di semua browser?
7
Ini harus bekerja pada semua browser, ya ... tapi kadang-kadang IE hanya suka men-cache keluar dari segala sesuatu
Nick Craver
@Nick - Saya mengatur cache ajax ke false.Tapi pesan sukses ajax tidak masuk di IE dan juga di FF. Bisakah Anda memverifikasi kode saya? apakah kode saya salah? Terima kasih var ajaxfile = basis + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({type: "GET", url: ajaxfile, // contentType: "application / json; charset = utf-8", cache: false, success: function (msg) {$ ("# popup"). html (msg);}});
SABU
Saya baru saja mengkonfirmasi bahwa IE11 mengabaikan header ini. Chrome juga melempar kesalahan CORS.
Idenya adalah untuk menambahkan parameter ke kueri ajax Anda yang berisi misalnya tanggal saat ini suatu waktu, sehingga browser tidak akan dapat men-cache itu.
Jawaban:
Anda dapat menonaktifkan caching secara global
$.ajaxSetup()
, misalnya:Ini menambahkan stempel waktu ke querystring saat mengajukan permintaan. Untuk mematikan cache untuk
$.ajax()
panggilan tertentu , aktifkancache: false
secara lokal, seperti ini:sumber
cache: false
hanya akan berfungsi dengan benar dengan permintaan HEAD dan GET. Juga, jika Anda menetapkancache: false
di$.ajaxSetup
, menurut jQuery.ajaxSetup () dokumentasi , itu akan "nilai-nilai default set untuk permintaan masa depan Ajax." Jadi ya, itu akan menonaktifkan cache untuk semua permintaan HEAD dan GET AJAX mendatang.cache: false
. Menonaktifkan caching secara global sepertinya berlebihan, tetapi memiliki kontrol per permintaan adalah sempurna. Terima kasihJika Anda mengatur parameter unik, maka cache tidak berfungsi, misalnya:
sumber
cache
sudah dilakukan parameter di belakang layar.Kedua nilai header ini dapat digabungkan untuk mendapatkan efek yang diperlukan baik pada IE maupun Firefox
sumber
Berikut ini proposal jawaban:
http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/
Idenya adalah untuk menambahkan parameter ke kueri ajax Anda yang berisi misalnya tanggal saat ini suatu waktu, sehingga browser tidak akan dapat men-cache itu.
Lihat tautannya, itu dijelaskan dengan baik.
sumber
cache
sudah dilakukan parameter di belakang layar.Anda dapat mendefinisikannya seperti ini:
atau seperti ini:
semoga membantu
sumber
Ini adalah posting lama, tetapi jika IE memberi Anda masalah. Ubah permintaan GET Anda menjadi POST dan IE tidak akan lagi menyimpannya.
Saya menghabiskan terlalu banyak waktu untuk mencari tahu ini dengan cara yang sulit. Semoga ini bisa membantu.
sumber
cache:false
berdasarkan kasus per kasus adalah caranya.