Terjemahan: Valens
Waktu: 11-06-2007
Teks asli: http://ajax.asp.net/docs/overview/AJAXClientEvents.aspx
Semua orang boleh berkomentar dan saya akan aktif melakukan modifikasi!
Pendahuluan [Pendahuluan]
Microsoft Ajax mengusulkan peristiwa siklus hidup sisi klien yang serupa dengan peristiwa siklus hidup sisi server pada halaman ASP.NET 2.0. Peristiwa sisi klien ini memungkinkan kami menyesuaikan antarmuka pengguna untuk postback tradisional dan postback asinkron (penyegaran halaman sebagian). Mereka juga dapat membantu Anda mengelola dan menggunakan skrip khusus sepanjang siklus hidup halaman.
Peristiwa sisi klien ini diusulkan di kelas AJAX Libray Microsoft (kita dapat menemukannya di kelas AJAX Libray). Kelas-kelas ini secara otomatis dipakai (dipakai?) ketika memuat kontrol server dengan AJAX. Kelas-kelas ini menyediakan beberapa API sehingga kita dapat mengikat kejadian ke pengendali penyedia kejadian. Dan Perpustakaan AJAX tidak bergantung pada browser, sehingga kode yang Anda tulis akan berfungsi di semua browser yang didukung.
Peristiwa penting adalah peristiwa pemuatan instance aplikasi yang memulai permintaan dan postback asinkron. Ketika skrip dijalankan selama event load handler, semua skrip dan komponen telah dimuat dan tersedia. Ketika bagian halaman di-refresh menggunakan kontrol UpdatePanel, peristiwa klien yang paling penting adalah kelas PageRequestManager. Peristiwa sisi klien ini memungkinkan Anda menerapkan skenario tertentu. Contohnya meliputi: Membatalkan postback, menetapkan prioritas yang lebih tinggi untuk postback, dan membuat UpdatePanel berinteraksi lebih baik saat menyegarkan.
Event-event ini sangat membantu kita dalam membuat halaman atau menulis komponen. Jika Anda seorang pengembang web, Anda dapat menggunakan skrip khusus untuk memuat dan membongkar halaman.
Untuk mempelajari lebih lanjut tentang peristiwa siklus hidup sisi server, Anda dapat merujuk ke Ikhtisar Siklus Hidup Halaman ASP.NET.
Kelas Klien [Kelas Klien]
di perpustakaan kelas Microsoft AJAX mengusulkan dua kelas utama dalam siklus hidup klien halaman web AJAX. Kelas aplikasi dan kelas PageRequestManager.
Kelas Aplikasi dipakai ketika browser meminta halaman yang berisi kontrol ScriptManager. Kelas Aplikasi mirip dengan kontrol Halaman sisi server. Kelas ini juga mewarisi kelas Kontrol, tetapi memiliki beberapa fungsi tambahan (dibandingkan dengan peristiwa sisi server). Demikian pula, Aplikasi mewarisi kelas Sys.COMponent Selain itu, ia juga menyediakan banyak peristiwa yang dapat dioperasikan selama siklus hidup klien.
Jika halaman berisi ScriptManager dan satu atau lebih kontrol UpdatePanel, maka halaman tersebut dapat mencapai efek pembaruan parsial. Dalam hal ini, sebuah instance dari kelas PageRequestManager tersedia untuk browser. Peristiwa klien yang disediakan oleh PageRequestManager semuanya tentang postback asinkron. Untuk rincian lebih lanjut tentang menghasilkan halaman parsial, silakan merujuk ke: Ikhtisar Rendering Halaman Parsial.
Menambahkan Penangan untuk Peristiwa Klien [Tambahkan Penangan untuk peristiwa klien]
Sekarang tambahkan atau hapus peristiwa dengan menggunakan metode add_eventname dan reomve_eventname di kelas Application dan PageRequestManager. Contoh berikut menunjukkan cara menambahkan handler bernama MyLoad ke event init objek Aplikasi.
Sys.Application.add_init(MyInit);
fungsi MyInit(pengirim) {
}
Sys.Appplication.remove_init(MyInit);
Komentar; Contoh ini hanya menampilkan sintaks penggunaan metode add_eventname dan delete_eventname. Detail lebih lanjut tentang penggunaan acara ini disediakan di topik selanjutnya.
Menangani Peristiwa Muat dan Bongkar Aplikasi [Peristiwa memuat dan membongkar Aplikasi Operasi]
Untuk mengoperasikan peristiwa memuat dan membongkar objek Aplikasi, tidak perlu mengikat secara eksplisit ke peristiwa operasi. Sebagai gantinya, Anda dapat membuat fungsi secara langsung menggunakan kata kunci yang dicadangkan pageLoad dan pageUnload. Contoh berikut menunjukkan cara menambahkan tindakan ke acara pemuatan Aplikasi.
fungsi pageLoad(pengirim, args) {
}
Peristiwa untuk Kelas Klien Lain [Kelas Klien Lain]
Topik ini hanya menjelaskan peristiwa yang disediakan oleh kelas Aplikasi dan PageRequestManager. Pustaka kelas AJAX Microsoft juga menyertakan kelas berikut untuk menambah, menghapus, dan menghapus peristiwa elemen DOM. Kelas-kelas ini meliputi:
Ada metode Sys.UI.DomEvent.addHandler atau singkatan $addHandler.
Ada metode Sys.UI.DomEvent.clearHandlers atau singkatan $clearHandlers.
Ada metode Sys.UI.DomEvent.removeHandler atau singkatan $ deleteHandler.
Peristiwa yang disediakan oleh prinsip DOM tidak dibahas dalam topik ini.
Peristiwa Klien dari Kelas Aplikasi dan PageRequestManager [Peristiwa klien dari kelas Aplikasi dan PageRequestManager]
Tabel berikut mencantumkan peristiwa klien dari kelas Aplikasi dan PageRequestManager yang dapat Anda gunakan di halaman AJAX ASP.NET. Urutan kejadiannya akan dibahas pada topik selanjutnya.
Peristiwa
(nama acara)
Keterangan
(menggambarkan)
initEvent
[Acara inisialisasi]
Acara ini dimunculkan setelah semua skrip dimuat dan sebelum objek apa pun dibuat. Jika Anda berencana untuk menulis komponen (skrip), acara init memberikan titik dalam siklus hidup untuk menambahkan komponen (skrip) ke halaman. Komponen ini dapat dipanggil oleh skrip lain dalam siklus hidup. Jika Anda seorang pengembang web, dalam banyak kasus, disarankan untuk menggunakan event load daripada event init.
Acara init hanya dibuat satu kali ketika halaman mulai dibuat. Penyegaran sebagian halaman berikutnya tidak akan memicu peristiwa init.
memuat acara
[memuat acara]
Event ini dimunculkan setelah semua skrip dimuat dan setelah semua objek program yang diinisialisasi dengan $create telah dibuat. Peristiwa ini akan dimunculkan oleh semua postback ke server, termasuk postback asinkron.
Jika Anda seorang pengembang web, Anda bisa membuat fungsi bernama pageLoad, yang disediakan oleh event load itu sendiri. Operasi pageLoad (handler) dapat dipanggil setelah operasi apa pun yang ditambahkan ke event load melalui metode add_load.
Peristiwa load memerlukan objek Sys.ApplicationLoadEventArgs sebagai parameter eventargs. Anda dapat menggunakan parameter ini untuk memutuskan apakah halaman perlu menampilkan penyegaran sebagian, dan Anda juga dapat memutuskan komponen mana yang harus dibuat setelah peristiwa pemuatan terakhir diaktifkan.
membongkar Acara
[Acara pencopotan pemasangan]
Dimunculkan sebelum semua objek dilepaskan dan sebelum peristiwa window.unload browser terjadi.
Anda dapat menangani event unload melalui fungsi bernama pageUnload yang disediakan oleh sistem itu sendiri. Acara pageUnload dipanggil saat halaman dibongkar di browser. Selama event ini, kita harus melepaskan semua sumber daya yang ditempati oleh kode tersebut.
acara propertyChanged
[Acara perubahan atribut]
Dibesarkan ketika properti komponen berubah. Objek aplikasi mewarisi kejadian ini dari kelas Komponen. Peristiwa ini hanya dimunculkan ketika pengembang memanggil metode Sys.Component.raisePropertyChange saat menyetel nilai properti.
Lihat Mendefinisikan Properti Komponen Kustom dan Memunculkan Peristiwa PropertyChanged untuk informasi lebih lanjut.
Peristiwa perubahan properti memerlukan objek Sys.applicationLoadEventArgs sebagai parameter eventargs.
membuang Acara
[acara rilis]
Peristiwa ini dimunculkan ketika instance aplikasi dirilis. Objek aplikasi mewarisi kejadian ini dari kelas Komponen.
inisialisasiPermintaan Acara
[Acara permintaan inisialisasi]
Peristiwa ini terjadi pada awal permintaan asinkron. Anda dapat menggunakan kejadian ini untuk membatalkan postback tradisional, misalnya untuk memungkinkan postback asinkron diutamakan.
Peristiwa permintaan inisialisasi memerlukan parameter eventargs yang disediakan oleh objek Sys.WebForms.InitializeRequestEventArgs. Objek ini menyediakan elemen objek berguna yang menyebabkan postback dan permintaan yang mendasarinya. Peristiwa ini juga memperlihatkan atribut batal. Jika Anda menyetel pembatalan ke true, postback baru akan dibatalkan.
acara BeginRequest
[Mulai acara permintaan]
Peristiwa ini dimunculkan sebelum postback asinkron ke server dimulai. Jika proses postback sudah ada, maka akan dihentikan (dengan menggunakan metode abortPostBack). Anda dapat menggunakan acara ini untuk mengatur header permintaan atau menampilkan perintah (animasi) yang menarik di halaman untuk menunjukkan bahwa permintaan sedang berlangsung.
Peristiwa ini memerlukan objek Sys.WebForms.BeginRequestEventArgs sebagai parameter eventargs. Objek ini menyediakan elemen berguna untuk menyebabkan postback dan objek permintaan yang mendasarinya.
Acara Pemuatan halaman
[Acara pemuatan halaman]
Dimunculkan sebelum konten apa pun di halaman diperbarui ketika postback asinkron telah diterima oleh server. Anda dapat menggunakan peristiwa ini untuk memberikan efek transisi khusus pada konten yang perlu diperbarui.
Peristiwa ini memerlukan objek Sys.WebForms.PageLoadingEventArgs sebagai parameter eventargs. Objek ini memberikan informasi berguna tentang panel mana yang akan dihapus dan diperbarui sebagai hasil dari postback asinkron terbaru.
Acara yang Dimuat halaman
[Acara selesai memuat halaman]
Dimunculkan setelah semua konten halaman disegarkan oleh hasil postback sinkron atau asinkron. Selama postback sinkron, panel hanya dapat dibuat, namun selama postback asinkron, panel dapat dibuat dan diperbarui. Anda dapat menggunakan peristiwa ini untuk mengelola efek perubahan khusus untuk konten yang perlu diperbarui.
Peristiwa ini memerlukan objek Sys.WebForms.PageLoadedEventArgs sebagai parameter eventargs. Objek ini memberikan informasi berguna tentang panel mana yang diperbarui dan dibuat selama postback terbaru.
Acara Permintaan akhir
[akhiri acara permintaan]
Dimunculkan setelah postback asinkron selesai sebagai respons dan halaman telah diperbarui, atau setelah terjadi kesalahan selama permintaan. Jika terjadi kesalahan, halaman tidak akan diperbarui. Gunakan acara ini untuk memberikan pesan kesalahan khusus kepada pengunjung atau masuk ke log kesalahan.
Peristiwa ini memerlukan objek Sys.WebForms.EndRequestEventArgs sebagai parameter eventargs. Objek ini memberikan beberapa informasi berguna tentang kesalahan yang muncul dan apakah kesalahan tersebut telah ditangani. Ini juga memberikan informasi yang tersedia tentang objek terkait.
Contoh Urutan Peristiwa [Contoh Urutan Peristiwa]
Contoh berikut menunjukkan bagaimana peristiwa sisi klien akan dimunculkan pada halaman dengan dua kontrol UpdatePanel bersarang. Harap perhatikan perbedaan antara mengklik tombol di panel induk dan tombol di panel tertanam. Tombol di panel induk akan menyebabkan panel induk diperbarui, dan panel yang tertanam di dalamnya akan dihapus dan dibuat ulang. Tombol dengan panel tertanam hanya menyebabkan pembaruan pada panel tertanam.
Kode halaman:
1<%@ Halaman Bahasa="C#" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transisi//EN"
4 " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
5
6<skrip runat="server">
7
8</skrip>
9
10<html xmlns=" http://www.w3.org/1999/xhtml " >
11<kepala runat="server">
12 <title>Contoh Acara Klien</title>
13 <tipe gaya="teks/css">
14 #OuterPanel { lebar: 600 piksel; tinggi: 200 piksel; batas: 2 piksel biru solid;
15 #NestedPanel { lebar: 596 piksel; tinggi: 60 piksel; batas: 2 piksel hijau solid;
16 margin-kiri:5 piksel; margin-kanan:5px;
17 </gaya>
18</kepala>
19<tubuh>
20 <form id="form1" runat="server">
21 <div>
22 <asp:ScriptManager ID="ScriptManager1" runat="server">
23 <Skrip>
24 <asp:ScriptReference Path="ClientEventTest.js" />
25 </Skrip>
26 </asp:Manajer Skrip>
27 <asp:UpdatePanel ID="OuterPanel" UpdateMode="Bersyarat" runat="server">
28 <Templat Konten>
29 Postback dari dalam panel luar dan panel dalam adalah
30 postback asinkron = Sys.WebForms.PageRequestManager.
31
32 <br /><br />
33 <asp:Button ID="OPButton1" Text="Tombol Panel Luar" runat="server" />
34 Terakhir diperbarui pada
35 <%= TanggalWaktu.Sekarang.ToString() %>
36 <br /><br />
37
38 <asp:UpdatePanel ID="NestedPanel" UpdateMode="Bersyarat" runat="server">
39 <Templat Konten>
40 <asp:Button ID="NPButton1" Text="Tombol Panel Bersarang 1" runat="server" />
41 Terakhir diperbarui pada
42 <%= TanggalWaktu.Sekarang.ToString() %>
43 <br />
44 </Templat Konten>
45 </asp:Panel Pembaruan>
46 </Templat Konten>
47 </asp:Panel Pembaruan>
48
49 <input type="button" onclick="Hapus();" value="Hapus" />
50
51 <asp:Button ID="FullPostBack" runat="server" Text="Full Postback" />
52 <a href=" http://www.microsoft.com">Uji Pembongkaran Jendela</a>
53 <br />
54 <span id="ClientEvents"></span>
55 </div>
56 </bentuk>
57</tubuh>
58</html>
59
kode skrip:
1// Hubungkan pengendali event Aplikasi.
2var aplikasi = Sys.Aplikasi;
3app.add_load(Beban Aplikasi);
4app.add_init(ApplicationInit);
5app.add_disposition(Pembuangan Aplikasi);
6app.add_unload(ApplicationUnload);
7
8
9// Pengendali kejadian aplikasi untuk pengembang komponen.
10fungsi ApplicationInit(pengirim) {
11 var prm = Sys.WebForms.PageRequestManager.getInstance();
12 jika (!prm.get_isInAsyncPostBack())
13 {
14 prm.add_initializeRequest(InitializeRequest);
15 prm.add_beginRequest(BeginRequest);
16 prm.add_pageLoading(Pemuatan Halaman);
17 prm.add_pageLoaded(PageLoaded);
18 prm.add_endRequest(Permintaan Akhir);
19}
20 $get('ClientEvents').innerHTML += "APP:: Aplikasi init.<br/>";
dua puluh satu}
22fungsi ApplicationLoad(pengirim, args) {
23 $get('ClientEvents').innerHTML += "APP:: Aplikasi dimuat. ";
24 $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
25}
26fungsi ApplicationUnload(pengirim) {
27 alert('APP::Pembongkaran aplikasi.');
28}
29fungsi Pembuangan Aplikasi(pengirim) {
30 $get('ClientEvents').innerHTML += "APP:: Pembuangan aplikasi. <br/>";
31
32}
33// Pengendali kejadian aplikasi untuk pengembang halaman.
34fungsi pageLoad() {
35 $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
36}
37
38fungsi halamanBongkar() {
39 alert('Halaman:: Pembongkaran halaman.');
40}
41
42// Penangan peristiwa PageRequestManager.
43fungsi InitializeRequest(pengirim, args) {
44 $get('ClientEvents').innerHTML += "<hr/>";
45 $get('ClientEvents').innerHTML += "PRM:: Menginisialisasi permintaan asinkron.<br/>";
46}
47fungsi BeginRequest(pengirim, argumen) {
48 $get('ClientEvents').innerHTML += "PRM:: Mulai memproses permintaan asinkron.<br/>";
49}
50fungsi Pemuatan Halaman(pengirim, argumen) {
51 $get('ClientEvents').innerHTML += "PRM:: Memuat hasil permintaan asinkron.<br/>";
52 varupdatePanels = printArray("PanelsUpdating", args.get_panelsUpdating());
53 var deletePanels = printArray("PanelsDeleting", args.get_panelsDeleting());
54
55 var pesan = "-->" + panel terupdate + "<br/>-->" + panel terhapus + "<br/>";
56
57 document.getElementById("ClientEvents").innerHTML += pesan;
58}
59fungsi PageLoaded(pengirim, args) {
60 $get('ClientEvents').innerHTML += "PRM:: Selesai memuat hasil permintaan asinkron.<br/>";
61 varupdatePanels = printArray("PanelsUpdated", args.get_panelsUpdated());
62 var createPanels = printArray("PaneslCreated", args.get_panelsCreated());
63
64 var pesan = "-->" + panel yang diperbarui + "<br/>-->" + panel yang dibuat + "<br/>";
65
66 document.getElementById("ClientEvents").innerHTML += pesan;
67}
68fungsi EndRequest(pengirim, argumen) {
69 $get('ClientEvents').innerHTML += "PRM:: Akhir permintaan asinkron.<br/>";
70}
71
72// Fungsi pembantu.
73fungsiHapus()
74{
75 $get('ClientEvents').innerHTML = "";
76}
77fungsi printArray(nama, arr)
78{
79 var panel = nama + '=' + arr.length;
80 jika(arr.panjang > 0)
81 {
82 panel += "(";
83 untuk(var i = 0; i < arr.panjang; i++)
84 {
85 panel += arr[i].id + ',';
86}
87 panel = panel.substring(0, panel.panjang - 1);
88 panel += ")";
89 }
90 panel pengembalian;
91}
92
Efek berjalan Lihat kode
Urutan Peristiwa untuk Skenario Umum [Urutan peristiwa umum]
Urutan pemicuan peristiwa masih bergantung pada kontrol apa yang digunakan di halaman dan jenis permintaan apa yang terjadi (permintaan inisialisasi, postback tradisional, atau postback asinkron). Bagian ini menjelaskan urutan permintaan kejadian untuk beberapa skenario umum.
Permintaan Awal [Permintaan inisialisasi]
Selama permintaan inisialisasi halaman, sejumlah kecil peristiwa klien dipicu. Asumsikan bahwa berikut ini adalah skenario permintaan inisialisasi.
· Halaman ini menyertakan kontrol ScriptManager, dan properti SupportsPartialRendering dan EnablePartialRendering dari kontrol tersebut keduanya benar.
· Permintaannya bertipe GET;
· Server dapat merespon secara normal.
Berikut adalah urutan kejadian yang terjadi di sisi klien:
1. Permintaan inisialisasi terjadi ke server.
2. Klien menerima tanggapan.
3. Contoh Aplikasi memicu peristiwa init.
4. Contoh Aplikasi memicu peristiwa pemuatan.
Peristiwa inisialisasi hanya terjadi sekali selama seluruh siklus hidup halaman saat aplikasi dipakai. Itu tidak akan dimunculkan oleh postback asinkron berikutnya. Selama permintaan awal (perhatikan permintaannya), tidak ada peristiwa PageRequestManager yang dimunculkan.
Postback Asinkron [Postback asinkron]
Postback asinkron mengirimkan beberapa data halaman ke server, menerima respons sisi server, dan kemudian menyegarkan sebagian halaman. Asumsikan skenario postback asinkron berikut:
· Halaman tersebut menyertakan kontrol ScriptManager, dan properti SupportsPartialRendering dan EnablePartialRendering dari kontrol tersebut keduanya benar.
· Ada kontrol UpdatePanel pada halaman, dan nilai properti ChildrenAsTriggers dari kontrol diubah menjadi true.
· Ada tombol di dalam UpdatePanel untuk memicu postback asinkron.
· Berhasil mendapatkan respon dari sisi server.
Berikut adalah urutan kejadian yang terjadi di sisi klien:
1. Saat mengklik tombol di kontrol UpdatePanel, terjadi postback asinkron.
2. Contoh PageRequestManager memicu kejadian inisialisasiRequest.
3. Contoh PageRequestManager memicu kejadian startRequest.
4. Permintaan dikirim ke server.
5. Klien menerima tanggapan.
6. Contoh PageRequestManager memicu kejadian pageLoading.
7. Contoh PageRequestManager memicu kejadian pageLoaded.
8. Contoh Aplikasi memicu peristiwa pemuatan.
9. Contoh PageRequestManager memicu kejadian endRequest.
Perlu diketahui bahwa peristiwa pemuatan aplikasi terjadi setelah peristiwa pageLoaded PageRequestManager dan sebelum peristiwa endRequest.
Beberapa Postback Asinkron [Beberapa Postback Asinkron]
Ketika permintaan sebelumnya berjalan di server atau browser dan pengguna mengirimkan permintaan baru, beberapa postback asinkron terjadi. Asumsikan bahwa skenario berikut menjelaskan kasus beberapa postback asinkron.
· Halaman ini menyertakan kontrol ScriptManager, dan properti SupportsPartialRendering dan EnablePartialRendering dari kontrol tersebut keduanya benar.
· Halaman ini berisi kontrol UpdatePanel.
· Di UpdatePanel, kontrol tombol yang menyebabkan postback asinkron diklik dua kali. Klik kedua terjadi saat server memproses permintaan yang dimulai oleh klik pertama.
· Memperoleh respons terhadap permintaan pertama yang dikembalikan dari server.
Berikut adalah urutan kejadian yang terjadi di sisi klien:
1. Mengklik tombol di UpdatePanel memicu postback asinkron.
2. Contoh PageRequestManager memicu kejadian inisialisasiRequest.
3. Contoh PageRequestManager memicu kejadian startRequest.
4. Permintaan dikirim ke server.
5. Klien menerima tanggapan.
6. Tombol diklik lagi, memicu postback asinkron kedua.
7. Contoh PageRequestManager memicu kejadian inisialisasiRequest untuk klik kedua.
8. Contoh PageRequestManager memicu kejadian BeginRequest untuk klik kedua.
9. Permintaan klik kedua Ekspedisi Utara memindai server.
10. Klien menerima respon klik kedua.
11. Contoh PageRequestManager memicu kejadian pageLoading.
12. Contoh PageRequestManager memicu kejadian pageLoaded.
13. Contoh Aplikasi memicu peristiwa pemuatan.
14. Contoh PageRequestManager memicu kejadian endRequest.
Perilaku postback asinkron default adalah bahwa postback asinkron terbaru akan diutamakan. Jika dua postback asinkron terjadi secara berurutan dan postback asinkron pertama masih diproses oleh browser, postback asinkron pertama dibatalkan. Jika postback pertama telah dikirim ke server, server tidak akan mengembalikan permintaan pertama hingga permintaan kedua tiba. Untuk rincian lebih lanjut tentang cara menetapkan prioritas untuk postback asinkron, lihat Memberi Prioritas pada Postback Asinkron Tertentu.
Menjelajah Jauh dari Halaman [Menjelajahi halaman lain]
Saat pengguna mengakses halaman lain dari satu halaman, halaman saat ini akan ditampilkan dari halaman tersebut. browser Unload, sehingga Anda dapat mengoperasikan acara unload untuk melepaskan sumber daya. Misalkan skenario ini disimulasikan di bawah ini.
· Halaman ini menyertakan kontrol ScriptManager, dan properti SupportsPartialRendering dan EnablePartialRendering dari kontrol tersebut keduanya benar.
· Halaman target ada.
Berikut adalah urutan kejadian yang terjadi di sisi klien:
1. Memulai permintaan halaman baru.
2. Browser mendapat respon meminta halaman baru.
3. Contoh Aplikasi memicu peristiwa unload.
4. Halaman baru ditampilkan.
Jika terjadi kesalahan saat meminta halaman baru, maka event unload akan tetap dimunculkan, namun halaman baru tidak akan ditampilkan.
【lebih】