IIS menemukan file ASP dan mengirimkannya ke mesin ASP (biasanya ASP.DLL) untuk diproses, dll. Teman yang membutuhkannya bisa merujuk ke sana. Pertama, mari kita pahami proses eksekusi halaman ASP.
1. IIS menemukan file ASP dan mengirimkannya ke mesin ASP (biasanya ASP.DLL) untuk diproses.
2. Mesin membuka file ASP dan menemukan konten antara <% dan %>, dan tentu saja konten antara <script runAt=server> dan </script> yang sesuai. Hanya konten dalam blok skrip yang diurai oleh mesin, dan konten lainnya diabaikan dan disisipkan di antara blok skrip sebagai karakter yang tidak berarti. Perlu dijelaskan bahwa sebenarnya, konten yang diurai lebih dari ini. File penyertaan sisi server dari kelas <!--#include ***--> juga disertakan dan diproses oleh mesin. Jika Anda banyak membaca program, Anda juga akan mengetahui bahwa beberapa objek <object> yang atribut runAtnya ditandai sebagai Server juga akan diproses di sini.
3. Mesin mengeksekusi skrip di blok skrip. Skrip sisi server ini dijalankan secara keseluruhan.
Copy kode kodenya sebagai berikut:
<%
Redupkan saya
Untuk i=1 sampai 5
%> Halo Dunia!
<% Berikutnya %>
Mesin tidak mengurai blok skrip ini secara terpisah, sehingga menyebabkan kesalahan sintaksis di kedua blok skrip. Jadi kita sampai pada kesimpulan berikut: tidak semua kode skrip non-server akan dikirim ke klien. Ada kemungkinan kode skrip non-server ini dibatasi oleh blok skrip. Server pasti tidak akan khawatir tentang eksekusi skrip klien, tetapi server dapat mengeluarkan skrip klien yang berbeda melalui skrip sisi server.
4. Terakhir, mesin menghasilkan aliran teks, atau hasil eksekusi skrip, yang dapat dianggap sebagai string, yaitu kode halaman web yang dikirim ke browser klien. Browser klien menampilkan halaman tersebut. Saat ini, kode sumber (file sumber) halaman tersebut tidak berisi skrip sisi server, tetapi berisi hasil eksekusi skrip sisi server (ini jelas).
<% … %> dan <skrip runat=server>…</skrip>
Semuanya adalah skrip sisi server yang diproses dan dijalankan pada waktu yang sama. Mereka tampil sebagai satu kesatuan.
<% … %> dan <skrip bahasa=…>…</skrip>
Yang pertama adalah skrip sisi server dan yang kedua adalah skrip sisi klien. Yang pertama dieksekusi terlebih dahulu dan yang terakhir dieksekusi kemudian.
Faktanya, hal ini belum tentu terjadi. Ada kemungkinan kedua skrip dijalankan secara bersamaan, tetapi spasinya tetap berbeda: yang pertama dijalankan di server, dan yang terakhir dijalankan di server peramban klien. Yang pertama secara logis harus dieksekusi lebih awal dari yang kedua. Pada saat yang sama, kami juga sampai pada kesimpulan: Selama eksekusi halaman yang sama, skrip sisi klien tidak dapat memberi umpan balik ke skrip sisi server dalam hal apa pun. Artinya, klien menelusuri buku tamu Anda dan mengirimkannya pesan baru atau nilai apa pun yang diperoleh skrip sisi klien. Tidak ada yang dapat diproses dalam respons server yang sama.
Tentang panggilan komponen
Perhatikan bahwa skrip sisi server dan skrip sisi klien keduanya adalah skrip. Tentu saja, Anda dapat membuat komponen xmlhttp, komponen ADODB.Connection, dll., tetapi keduanya tidak dapat ditempatkan di mana pun.
Jika xmlhttp digunakan untuk merayapi halaman web (seperti koleksi) dari server, itu harus dibuat di skrip server. Jika digunakan untuk ajax klien untuk mengakses halaman sisi server di latar belakang tanpa menyegarkan, maka xmlhttp akan berjalan pada klien, dan tentu saja pada klien Dibuat di akhir.
Komponen ADODB.Connection digunakan untuk mengakses database. Secara umum, itu dibuat di sisi server, itu adalah program asp sisi server yang menjalankan data database sisi, maka tidak ada keraguan bahwa itu akan dibuat di sisi klien.
Singkatnya, hal-hal yang kontradiktif dan masing-masing pihak mempunyai ciri khasnya masing-masing. Hal yang berbeda memiliki kontradiksi yang berbeda; hal yang sama memiliki kontradiksi yang berbeda dalam proses dan tahap perkembangan yang berbeda kontradiksi yang berbeda dalam hal yang sama dan dua aspek yang berbeda dari kontradiksi yang sama masing-masing memiliki kekhususannya sendiri (Anda dapat menghilangkannya bagi yang tidak mengerti) Don tidak terlihat…). Prinsip ini mengharuskan kita untuk berpegang pada prinsip analisis konkrit terhadap masalah-masalah tertentu, dan di bawah bimbingan prinsip universalitas kontradiksi, secara konkrit menganalisis kekhususan kontradiksi dan menemukan metode yang tepat untuk menyelesaikannya. Kami menentang penggunaan satu metode untuk menyelesaikan kontradiksi berbagai hal. Inilah artinya membuka gembok dengan kunci dan menyanyikan lagu apa pun yang Anda dengarkan di gunung mana pun.
Skrip VBScript sisi server menggunakan metode Server.CreateObject(className) untuk membuat objek, dan skrip VBScript sisi klien menggunakan metode CreateObject(className) untuk membuat objek.
Kesalahan umum
Copy kode kodenya sebagai berikut:
<%
FungsiUkuran(b)
'Ini adalah fungsi khusus saya
TSUkuran = Tiongkok
fungsi akhir
%>
<a href=javascript:<%TSize('Variable')%> >Klik di sini untuk menggunakan fungsi yang saya tentukan</a>
Analisis kesalahan:
Membingungkan perbedaan antara skrip sisi server dan skrip sisi klien. Selama eksekusi sebenarnya, kita akan menemukan bahwa klien tidak menerima kode apa pun seperti TSize sama sekali, karena TSize adalah program sisi server yang diproses oleh mesin (perhatikan bahwa pemrosesan fungsi mesin adalah murni untuk skrip sisi server panggilan dan tidak akan dikirim kembali ke klien) menghilang dan tidak mungkin berfungsi pada klien. Ini berarti skrip sisi klien tidak dapat langsung memanggil fungsi skrip sisi server.
Faktanya, program ini memiliki kesalahan sintaksis. Saat mesin memproses konten ini, pertama-tama ia menemukan konten antara <% dan %>, yaitu <%TSize('variable')%> dengan aturan sintaksis VBScript. Nah, jika Anda mengubahnya menjadi <%=TSize(variable)%>, tidak akan ada kesalahan sintaksis di skrip sisi server. Saat ini, fungsi TSize dapat mengembalikan nilai China secara normal, sehingga atribut href diterima klien ditulis seperti ini: javascript: China, tidak dapat diterapkan.
Dampak skrip sisi server pada skrip sisi klien
Seperti disebutkan sebelumnya, skrip sisi server dieksekusi secara logis sebelum skrip sisi klien, sehingga kode seperti ini dapat dilakukan:
Copy kode kodenya sebagai berikut:
<%
Redupkan saya
Untuk i=1 sampai 5
Respon.Tulis <tipe skrip=teks/javascript> _
& peringatan('Halo Dunia! & saya & ')</script>
Berikutnya
%>
Mengenai eksekusi Response.Redirect dan javascript
Perhatikan bahwa kode berikut ini salah ditulis:
Copy kode kodenya sebagai berikut:
<%
Respon.Redirect indeks.asp
Respon.Tulis <tipe skrip=teks/javascript> _
& alert('Sandi salah!')</script>
%>
Ini adalah kesalahan umum. Penulis sering berpikir bahwa menulis kode dengan cara ini akan menyebabkan klien memunculkan prompt kesalahan kata sandi dan kemudian mengarahkan ke index.asp kode dipertukarkan, itu tidak akan terjadi.
Alasannya terkait dengan cara server menangani dua baris kode tersebut. Tidak mungkin kedua baris kode ini berfungsi secara bersamaan.
Response.Write adalah mengirimkan sepotong teks ke klien. Isi teks ini dapat berupa skrip. Kemudian browser klien dapat mengeksekusi skrip tersebut setelah menerimanya.
Response.Redirect mengirimkan header HTTP ke klien (apa itu header HTTP? Mari kita begini, misalnya, menulis ke cookie klien adalah informasi header HTTP, dan informasi header HTTP dikirim kembali ke klien sebelum badan HTTP Browser , inilah mengapa terkadang kami mendapatkan kesalahan saat memodifikasi Cookie setelah mematikan buffering server, karena isi sudah mulai melakukan transmisi dan header HTTP tidak diperbolehkan untuk dikirim. informasi.), isi informasi memberitahu browser klien bahwa ia harus melompat ke halaman untuk menjelajah. Perhatikan bahwa informasi Pengalihan ini berlaku segera, yang berarti bahwa informasi Pengalihan ini bersifat eksklusif Ketika buffer diaktifkan, apa pun apakah Response telah digunakan. .Write menulis berapa banyak konten yang ditulis ke dalam buffer. Setelah Response.Redirect dipanggil, buffer akan dihapus dan instruksi header ini akan dikirim ke browser klien. Jika kami melacak eksekusi program secara dinamis, kami juga akan menemukan bahwa setelah memanggil Response.Redirect, program berhenti dijalankan, jadi harap dicatat bahwa program sisi server harus menutup koneksi data dan operasi lain sebelum memanggil Response.Redirect.
Jadi bagaimana contoh di atas harus diubah? Jika Anda tidak ingin mengubah index.asp untuk menambahkan prompt skrip, Anda hanya dapat menjalankan instruksi pengalihan di skrip klien, seperti ini:
Copy kode kodenya sebagai berikut:
<%
Respon.Tulis <tipe skrip=teks/javascript> _
& peringatan('!');location.href='index.asp'</script>
%>