Saat men-debug aplikasi jQuery yang menggunakan AJAX, saya sering perlu melihat json yang sedang dikembalikan oleh layanan ke browser. Jadi saya akan memasukkan URL untuk data JSON ke bilah alamat.
Ini bagus dengan ASPNET karena jika terjadi kesalahan pengkodean, saya dapat melihat ASPNET diagostic di browser:
Tetapi ketika kode sisi server bekerja dengan benar dan benar-benar mengembalikan JSON, IE meminta saya untuk mengunduhnya, jadi saya tidak dapat melihat jawabannya.
Dapatkah saya membuat IE TIDAK melakukan itu, dengan kata lain, hanya menampilkannya seolah-olah itu teks biasa?
Saya tahu saya bisa melakukan ini jika saya mengatur header Tipe Konten menjadi text/plain
.
Tapi ini secara khusus merupakan konteks aplikasi ASPNET MVC, yang mengatur respons secara otomatis ketika saya menggunakan JsonResult pada salah satu metode tindakan saya. Saya juga ingin mempertahankan tipe konten yang sesuai, dan tidak mengubahnya hanya untuk mendukung upaya debugging.
Jawaban:
Saya menemukan jawabannya.
Anda dapat mengkonfigurasi IE8 untuk menampilkan aplikasi / json di jendela browser dengan memperbarui registri. Tidak perlu alat eksternal. Saya belum menguji ini secara luas, tetapi bekerja dengan IE8 di Vista.
Untuk menggunakan ini, ingat, semua peringatan tentang memperbarui registri berlaku. Hentikan IE. Kemudian, potong dan rekatkan yang berikut ke dalam file, dengan nama
json-ie.reg
.Kemudian klik dua kali file .reg. Mulai ulang IE. Perilaku baru yang Anda dapatkan saat menggelitik URL yang mengembalikan dokumen dengan
Content-Type: application/json
atauContent-Type: text/json
seperti ini:Apa yang dilakukannya, mengapa itu bekerja:
Ini
25336920-03F9-11cf-8FD0-00AA00686F13
adalah CLSID untuk tindakan "Browse in place". Pada dasarnya entri registri ini memberi tahu IE bahwa untuk dokumen yang memiliki tipe aplikasi mime / json, cukup tampilkan di tempat. Ini tidak akan memengaruhi aplikasi / dokumen json apa pun yang diunduh melalui<script>
tag, atau melalui XHR, dan sebagainya.Kunci CLSID dan Encoding mendapatkan nilai-nilai yang sama digunakan untuk
image/gif
,image/jpeg
dantext/html
.Petunjuk ini datang dari situs ini , dan dari artikel Microsoft Menangani Jenis MIME di Internet Explorer .
Di FF, Anda tidak perlu tambahan eksternal. Anda bisa menggunakan
view-source:
protokol semu. Masukkan URL seperti ini ke bilah alamat:Protokol semu ini dulunya didukung di IE, juga, hingga WinXP-sp2, ketika Microsoft menonaktifkannya untuk alasan keamanan.
sumber
reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /t REG_SZ /d "{25336920-03F9-11cf-8FD0-00AA00686F13}"; reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /v Encoding /t REG_DWORD /d 0x08000000
text/json
kuncinya.Saya punya masalah serupa. Saya menggunakan jQuery "$. GetJSON" dan semuanya bekerja dengan baik di Firefox dan Chrome.
Tetapi tidak berhasil di IE. Jadi saya mencoba mengakses URL json secara langsung, tetapi di IE ditanya apakah saya ingin mengunduh file tersebut.
Setelah banyak pencarian, saya melihat bahwa harus ada header di hasil dengan tipe konten, dalam kasus saya, tipe kontennya adalah:
Tetapi ketika halaman yang membuat permintaan menerima json ini, di IE, Anda harus ditentukan JENIS KONTEN SAMA, dalam kasus saya adalah:
pelukan
sumber
text/plain; charset=UTF-8
. Tidak perlu teks / html.Solusi di atas adalah hal yang hilang, dan kode di bawah ini harus berfungsi dalam setiap situasi:
Simpan saja file json.reg, dan jalankan untuk memodifikasi registri Anda.
sumber
Jika Anda setuju dengan IE membuka JSON ke notepad, Anda dapat mengubah program default sistem Anda untuk file .json menjadi Notepad.
Untuk melakukan ini, buat atau temukan file .json, klik kanan mouse, dan pilih "Open With" atau "Choose Default Program."
Ini mungkin berguna jika Anda ingin menggunakan Internet Explorer tetapi perusahaan IT Anda tidak akan membiarkan Anda mengedit registri Anda. Kalau tidak, saya merekomendasikan jawaban di atas.
sumber
Saya menggunakan Fiddler dengan plugin JSONViewer untuk memeriksa JSON. Saya rasa tidak mungkin membuat IE berperilaku tanpa mengutak-atik registri. Ini beberapa informasi.
sumber
Mengubah pengaturan tipe mime JSON IE akan mempengaruhi cara IE memperlakukan semua respons JSON.
Mengubah tajuk tipe mime ke teks / html akan secara efektif memberi tahu browser apa pun bahwa respons JSON yang Anda kembalikan bukan JSON tetapi teks biasa.
Tidak ada opsi yang lebih disukai.
Alih-alih, Anda ingin menggunakan plugin atau alat seperti Fiddler yang disebutkan di atas atau proxy pengawas lalu lintas jaringan lainnya di mana Anda dapat memilih setiap kali bagaimana memproses respons JSON.
sumber
text/html
tidak memberi tahu browser bahwa responsnya adalah teks biasa, tetapi HTML. Jika Anda memutuskan ingin teks biasa, gunakantext/plain
. Kalau tidak, Anda bisa berakhir dengan beberapa kerentanan XSS yang menarik.FireFox + FireBug sangat baik untuk tujuan ini. Untuk IE ada toolbar pengembang yang saya tidak pernah gunakan dan berniat untuk digunakan jadi saya tidak bisa memberikan banyak umpan balik.
sumber
Saya baru saja mengalami masalah yang sama dengan XMLHttpRequest. Situs berfungsi dengan sempurna di Chrome dan FF, dan dalam puluhan browser Internet Explorer dalam produksi. SATU mesin ini (yang diatur oleh perusahaan kami untuk menjadi mesin demo, tentu saja) memutuskan bahwa ia akan meminta untuk menyimpan respons json ke permintaan ajax.
Solusi regedit yang diterima di bawah memperbaikinya. Terima kasih.
sumber
Anda bisa melihat jawabannya di Fiddler: http://www.fiddler2.com/fiddler2/
Itu alat yang bagus untuk hal-hal seperti itu!
sumber