Saya memiliki kode berikut yang membuat permintaan GET pada URL:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Tetapi hasil yang dikembalikan tidak selalu tercermin. Sebagai contoh, saya membuat perubahan pada respons yang memuntahkan jejak tumpukan tetapi jejak tumpukan tidak muncul ketika saya mengklik tombol pencarian. Saya melihat kode PHP yang mendasari yang mengontrol respon ajax dan memiliki kode yang benar dan mengunjungi halaman secara langsung menunjukkan hasil yang benar tetapi output yang dikembalikan oleh .load sudah tua.
Jika saya menutup browser dan membukanya kembali itu berfungsi sekali dan kemudian mulai mengembalikan informasi basi. Bisakah saya mengontrol ini dengan jQuery atau apakah saya perlu memiliki header output skrip PHP untuk mengontrol caching?
Berikut adalah contoh cara mengontrol caching berdasarkan per-permintaan
sumber
Salah satu caranya adalah dengan menambahkan nomor unik ke bagian akhir url:
Di mana Anda menulis uniqueId () untuk mengembalikan sesuatu yang berbeda setiap kali dipanggil.
sumber
(+new Date)
(ataunew Date().getTime()
jika Anda ngotot). Lihat Bagaimana Anda mendapatkan cap waktu dalam JavaScript?Pendekatan lain untuk meletakkan baris di bawah ini hanya ketika perlu untuk mendapatkan data dari server, tambahkan baris di bawah ini bersama dengan url ajax Anda.
'? _ =' + Math.round (Math.random () * 10000)
sumber
sumber
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha adalah ide bagus, saya menggunakan campuran.
Saya membuat fungsi
Dan panggil untuk bagian yang berbeda dari halaman saya misalnya di init:
Init: function (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
ExampleJS.LoadWithoutCache (actionUrl2, "div2"); ExampleJS.LoadWithoutCache (actionUrl3, "div3"); }},
sumber
Ini adalah gangguan khusus di IE. Pada dasarnya Anda harus mengirim header HTTP 'tanpa cache' kembali dengan respons Anda dari server.
sumber
Untuk PHP, tambahkan baris ini ke skrip Anda yang menyajikan informasi yang Anda inginkan:
atau, tambahkan variabel unik ke string kueri:
sumber
JANGAN gunakan cap waktu untuk membuat URL unik karena setiap halaman yang Anda kunjungi di-cache dalam DOM oleh jquery mobile dan Anda segera mengalami kesulitan kehabisan memori pada ponsel.
Kode ini diaktifkan sebelum halaman dimuat, Anda dapat menggunakan url.indexOf () untuk menentukan apakah URL yang ingin Anda cache atau tidak dan mengatur parameter cache yang sesuai.
Jangan gunakan window.location = ""; untuk mengubah URL jika tidak Anda akan menavigasi ke alamat dan pagebeforeload tidak akan diaktifkan. Untuk mengatasi masalah ini cukup gunakan window.location.hash = "";
sumber
Jika Anda ingin tetap menggunakan metode .load () Jquery, tambahkan sesuatu yang unik ke URL seperti cap waktu JavaScript. "+ Tanggal baru (). getTime ()". Perhatikan saya harus menambahkan "& waktu =" sehingga tidak mengubah variabel pid Anda.
sumber
Anda dapat mengganti fungsi memuat jquery dengan versi yang cache disetel ke false.
Tempatkan ini di suatu tempat global di mana ia akan berjalan setelah banyak jquery dan Anda harus siap. Kode muat Anda yang ada tidak akan lagi di-cache.
sumber
Coba ini:
Ini berfungsi dengan baik ketika saya menggunakannya.
sumber
Saya perhatikan bahwa jika beberapa server (seperti Apache2) tidak dikonfigurasikan untuk secara khusus mengizinkan atau menolak "caching", maka server dapat secara default mengirim respons "cached", bahkan jika Anda mengatur header HTTP ke "no-cache". Jadi pastikan server Anda tidak "menyimpan" apa pun sebelum mengirimkan respons:
Dalam hal Apache2 Anda harus
1) edit file "disk_cache.conf" - untuk menonaktifkan cache tambahkan direktif "CacheDisable / local_files"
2) memuat modul mod_cache (Di Ubuntu "sudo a2enmod cache" dan "sudo a2enmod disk_cache")
3) restart Apache2 (Ubuntu "sudo service apache2 restart");
Ini harus melakukan trik menonaktifkan cache di sisi server. Bersulang! :)
sumber
Kode ini dapat membantu Anda
sumber