Saya sedang bermain-main dengan ASP.net MVC dan JQuery saat ini. Saya telah menemukan perilaku yang tampaknya tidak masuk akal.
Saya memanggil $.getJSON
fungsi JQuery untuk mengisi beberapa div. Acara dipicu pada $(document).ready
acara tersebut. Ini bekerja dengan sempurna.
Ada yang kecil AJAX.BeginForm
yang menambahkan nilai lain untuk digunakan saat mengisi div. Ini memanggil fungsi jarak jauh dengan benar dan setelah berhasil memanggil fungsi javascript asli untuk mengisi kembali div.
Inilah bagian yang aneh: Di FireFox dan Chrome - Semuanya berfungsi. TAPI Di IE8 (Beta), panggilan kedua ini ke skrip Div populate (yang memanggil fungsi $ .getJSON) mendapat data cache dan tidak meminta server!
Semoga pertanyaan ini masuk akal: Singkatnya - Mengapa $.getJSON
mendapatkan data dalam cache? Dan mengapa ini hanya mempengaruhi IE8?
sumber
Jawaban:
Sekadar memberi tahu Anda, Firefox dan Chrome menganggap semua permintaan Ajax sebagai tidak dapat disimpan dalam cache. IE (semua versi) memperlakukan panggilan Ajax seperti permintaan web lainnya. Itulah mengapa Anda melihat perilaku ini.
Cara memaksa IE untuk mengunduh data di setiap permintaan:
Kode:
sumber
Beginilah cara kerjanya untuk saya ...
sumber
$.ajaxSetup({ cache: true });
tepat setelahgetJSON()
dan bukan di callback.Terima kasih Kent atas jawaban Anda. Menggunakan $ .ajax ('{cache: no}'); bekerja dengan sempurna. [edit]
Atau setidaknya saya pikir saya melakukannya. Tampaknya jquery $ .getJSON tidak membaca perubahan apa pun yang dilakukan pada objek $ .ajax.
Solusi yang akhirnya berhasil adalah menambahkan parameter baru secara manual
resolusi tanggal hanya dalam hitungan menit; yang secara efektif berarti solusi ini masih menyimpan cache hingga satu menit. Ini dapat diterima untuk tujuan saya.
sumber
Math.Random()
dapat digunakan, hasilnya tidak akan diketahui dan Anda mungkin mendapatkan nomor yang sama dua kali berturut-turut (atau lebih). menggunakannew Date().getTime()
akan memastikan bahwa itu tidak pernah terulang. (kecuali jika Anda dapat kembali ke masa lalu;))Saya memecahkan masalah yang sama ini dengan menempatkan atribut berikut pada Action di Controller:
sumber
Jika Anda menggunakan ASP.net MVC, pertimbangkan untuk menambahkan metode ekstensi agar mudah menerapkan tanpa caching seperti ini:
sumber
Anda mungkin perlu mengirim pemecah cache.
Saya akan merekomendasikan menggunakan $ .ajax ({cache: no}) untuk berjaga-jaga (menambahkan sufiks acak ke permintaan get)
(Saya cenderung menggunakan $ .ajax di mana-mana akhir-akhir ini, lebih bisa disetel)
sumber
Siap untuk jawabannya?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Jadi, tambahkan saja
di awal naskah Anda dan BANG berhasil!
sumber