Saya ingin mengaktifkan cache dari respons ajax di javascript / browser.
Dari dokumen jquery.ajax :
Secara default, permintaan selalu dikeluarkan, tetapi browser mungkin menyajikan hasil dari cache-nya. Untuk melarang penggunaan hasil cache, setel cache ke false. Untuk menyebabkan permintaan melaporkan kegagalan jika aset belum diubah sejak permintaan terakhir, setel ifModified ke true.
Namun, tidak satu pun dari alamat ini yang memaksa penyimpanan ke cache.
Motivasi:
Saya ingin melakukan $.ajax({...})
panggilan dalam fungsi inisialisasi saya, beberapa di antaranya meminta url yang sama. Terkadang saya perlu memanggil salah satu fungsi inisialisasi ini, terkadang saya memanggil beberapa.
Jadi, saya ingin meminimalkan permintaan ke server jika url tertentu telah dimuat.
Saya dapat menggulirkan solusi saya sendiri (dengan sedikit kesulitan!), Tetapi saya ingin tahu apakah ada cara standar untuk melakukan ini.
Jawaban:
cache:true
hanya bekerja dengan permintaan GET dan HEAD.Anda dapat menggulung solusi Anda sendiri seperti yang Anda katakan dengan sesuatu di sepanjang baris ini:
Bekerja biola di sini
EDIT: saat posting ini menjadi populer, berikut adalah jawaban yang lebih baik bagi mereka yang ingin mengelola cache batas waktu dan Anda juga tidak perlu repot dengan semua kekacauan di $ .ajax () karena saya menggunakan $ .ajaxPrefilter () . Sekarang pengaturan saja
{cache: true}
sudah cukup untuk menangani cache dengan benar:Dan biola di sini HATI-HATI, tidak bekerja dengan $. Ditunda
Berikut adalah implementasi yang berfungsi tetapi cacat bekerja dengan deferred:
Mainkan DI SINI Beberapa masalah, ID cache kami bergantung pada representasi objek JSON json2 lib.
Gunakan tampilan Konsol (F12) atau FireBug untuk melihat beberapa log yang dihasilkan oleh cache.
sumber
localCache.set
fungsi tersebut? Mengapa tidak hanyadoSomehing(jqXHR)
setelah mengatur cache?doSomething(localCache.set(url,jqXHR));
itu tetapi itu hanya preferensi pribadilocalCache.data[url] = { _: new Date().getTime(), data: _.cloneDeep(cachedData, true) }; _.cloneDeep(localCache.data[url].data, true)
Saya sedang mencari caching untuk penyimpanan aplikasi phonegap saya dan saya menemukan jawaban dari @TecHunter yang sangat bagus tetapi sudah selesai digunakan
localCache
.Saya menemukan dan mengetahui bahwa localStorage adalah alternatif lain untuk menyimpan data yang dikembalikan oleh panggilan ajax. Jadi, saya membuat satu demo
localStorage
yang akan membantu orang lain yang mungkin ingin menggunakanlocalStorage
daripadalocalCache
untuk caching.Panggilan Ajax:
Untuk menyimpan data ke localStorage:
Jika Anda ingin menghapus localStorage, gunakan pernyataan berikut dimanapun Anda inginkan:
Semoga bisa membantu orang lain!
sumber
localStorage.removeItem("Info");
,"info"
apakah itu urlnya?info
adalah objek untuk menyimpan data di localStorage.responseJSON is not defined
. Adakah cara untuk memperbaikinya? (tipe data saya adalah html)Semua browser modern memberi Anda apis penyimpanan. Anda dapat menggunakannya (localStorage atau sessionStorage) untuk menyimpan data Anda.
Yang harus Anda lakukan adalah setelah menerima respon, simpan ke penyimpanan browser. Kemudian lain kali Anda menemukan panggilan yang sama, cari jika respons sudah disimpan. Jika ya, kembalikan tanggapan dari sana; jika tidak membuat panggilan baru.
Plugin Smartjax juga melakukan hal serupa; tetapi karena kebutuhan Anda hanya menyimpan respons panggilan, Anda dapat menulis kode Anda di dalam fungsi sukses ajax jQuery untuk menyimpan respons. Dan sebelum melakukan panggilan periksa saja apakah responsnya sudah disimpan.
sumber
Jika saya mengerti pertanyaan Anda, inilah solusinya:
dan untuk panggilan tertentu
Jika Anda ingin sebaliknya (cache untuk panggilan tertentu) Anda dapat mengatur false di awal dan benar untuk panggilan tertentu.
sumber
Pertanyaan lama, tetapi solusi saya sedikit berbeda.
Saya sedang menulis aplikasi web satu halaman yang terus-menerus membuat panggilan ajax yang dipicu oleh pengguna, dan untuk membuatnya lebih sulit lagi diperlukan pustaka yang menggunakan metode selain jquery (seperti dojo, native xhr, dll). Saya menulis sebuah plugin untuk salah satu perpustakaan saya sendiri untuk menyimpan permintaan ajax seefisien mungkin dengan cara yang akan bekerja di semua browser utama, terlepas dari perpustakaan mana yang digunakan untuk melakukan panggilan ajax.
Solusinya menggunakan jSQL (ditulis oleh saya - implementasi SQL persisten sisi klien yang ditulis dalam javascript yang menggunakan indexeddb dan metode penyimpanan dom lainnya), dan dibundel dengan pustaka lain yang disebut XHRCreep (ditulis oleh saya) yang merupakan penulisan ulang lengkap dari objek XHR asli.
Untuk menerapkan semua yang perlu Anda lakukan adalah memasukkan plugin di halaman Anda, yang ada di sini .
Ada dua pilihan:
Tetapkan usia maksimal dalam hitungan menit. setiap tanggapan yang disimpan dalam cache yang lebih lama dari ini akan diminta ulang. Default-nya adalah 1 jam.
Jika disetel ke true, panggilan XHR tiruan akan ditampilkan di konsol untuk proses debug.
Anda dapat mengosongkan cache pada halaman mana pun melalui
sumber
masukkan deskripsi tautan di sini
sumber