Deskripsi objek Respon. Bentuk Gila Respons lezat html

Menghasilkan respons dari pengontrol

Setelah pengontrol selesai memproses permintaan, biasanya diperlukan untuk menghasilkan respons. Saat kita membuat pengontrol tingkat rendah dengan langsung mengimplementasikan antarmuka IController, kita harus bertanggung jawab atas setiap aspek pemrosesan permintaan, termasuk menghasilkan respons ke klien.

Misalnya, untuk mengirim respons HTML, Anda perlu membuat dan menyusun data HTML, lalu mengirimkannya ke klien menggunakan metode Response.Write(). Demikian pula, untuk mengalihkan browser pengguna ke URL yang berbeda, Anda perlu memanggil metode Response.Redirect() dan meneruskannya ke URL yang diperlukan. Kedua pendekatan ditunjukkan dalam kode di bawah ini, yang menunjukkan ekstensi ke kelas BasicController yang kita buat di artikel sebelumnya menggunakan implementasi antarmuka IController:

Menggunakan System.Web.Mvc; menggunakan System.Web.Routing; namespace ControllersAndActions.Controllers ( BasicController kelas publik: IController ( public void Execute(RequestContext requestContext) ( string controller = (string)requestContext.RouteData.Values["controller"]; string action = (string)requestContext.RouteData.Values["action "]; if (action.ToLower() == "redirect") ( requestContext.HttpContext.Response.Redirect("/Derived/Index"); ) else ( requestContext.HttpContext.Response.Write(string.Format("Controller : (0), Metode tindakan: (1)", pengontrol, tindakan)); ) ) ) )

Pendekatan yang sama dapat diterapkan jika controller diwarisi dari kelas Controller. Kelas HttpResponseBase yang dikembalikan saat membaca properti requestContext.HttpContext.Response dalam metode Execute() tersedia melalui properti Controller.Response, seperti yang ditunjukkan dalam contoh berikut, yang memperluas kelas DerivedController, juga dibuat sebelumnya dengan mewarisi dari kelas Kelas pengontrol:

Menggunakan Sistem; menggunakan System.Web; menggunakan System.Web.Mvc; namespace ControllersAndActions.Controllers ( public class DerivedController: Controller ( public ActionResult Index() ( // ... ) public void ProduceOutput() ( if (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index" ); else Response.Write("Controller: Derived, Metode Tindakan: ProduceOutput"); ) ) )

Metode ProduceOutput() menggunakan nilai properti Server.MachineName untuk memutuskan respons mana yang akan dikirim ke klien. ("ProfessorWeb" adalah nama mesin pengembangan saya.)

Meskipun pendekatan menghasilkan respons terhadap pengguna ini berhasil, ada beberapa masalah dengannya:

    Kelas pengontrol harus berisi informasi tentang HTML atau struktur URL, yang membuat kelas lebih sulit untuk dibaca dan dipelihara.

    Kontroler yang menghasilkan respons langsung ke output sulit untuk diuji unit. Anda perlu membuat implementasi tiruan dari objek Response dan kemudian dapat memproses output dari controller untuk menentukan apa itu. Ini mungkin berarti, misalnya, kebutuhan untuk menerapkan penguraian kata kunci dari markup HTML, yang merupakan proses yang panjang dan membosankan.

    Penanganan detail halus dari setiap respons ini rumit dan rawan kesalahan. Beberapa programmer menyukai kontrol absolut yang disediakan dengan membangun pengontrol tingkat rendah, tetapi ini biasanya menjadi rumit dengan sangat cepat.

Untungnya, Kerangka MVC memiliki alat praktis yang menyelesaikan semua masalah yang disebutkan - hasil tindakan. Bagian berikut menjelaskan konsep hasil tindakan dan menunjukkan berbagai cara penggunaannya untuk membangkitkan tanggapan dari pengontrol.

Hasil tindakan

Hasil tindakan dalam Kerangka MVC digunakan untuk memisahkan pernyataan maksud dari eksekusi maksud (maaf untuk tautologinya). Konsepnya tampak sederhana setelah Anda memahaminya, tetapi perlu waktu untuk memahami karena beberapa tipuan.

Alih-alih berurusan langsung dengan objek Respon, metode tindakan mengembalikan objek kelas yang diturunkan dari Hasil Tindakan, yang menjelaskan seperti apa seharusnya respons dari pengontrol, seperti merender tampilan atau mengalihkan ke URL atau metode tindakan lain. Namun (ini adalah tipuan yang sangat) jawabannya tidak dihasilkan secara langsung. Sebagai gantinya, objek ActionResult dibuat yang diproses oleh Kerangka Kerja MVC untuk mendapatkan hasil setelah metode tindakan dipanggil.

Sistem Hasil Tindakan adalah contoh pola desain Perintah. Templat ini mewakili skenario tempat Anda menyimpan dan meneruskan objek yang menjelaskan operasi yang akan dilakukan.

Ketika Kerangka MVC menerima objek ActionResult dari metode tindakan, itu memanggil ExecuteResult() metode Yang didefinisikan dalam kelas objek ini. Implementasi hasil tindakan kemudian beroperasi pada objek Response untuk menghasilkan output yang sesuai dengan maksud Anda. Untuk mendemonstrasikan ini dalam tindakan, mari buat folder Infrastruktur dan tambahkan file kelas baru bernama CustomRedirectResult.cs ke dalamnya dengan implementasi ActionResult kustom yang ditunjukkan pada contoh di bawah ini:

Menggunakan System.Web.Mvc; namespace ControllersAndActions.Infrastructure ( public class CustomRedirectResult: ActionResult ( public string Url ( get; set; ) public override void ExecuteResult(ControllerContext context) ( string fullUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext); context.HttpContext.Redirect (Url lengkap); ) ) )

Kelas ini didasarkan pada cara kerja kelas System.Web.Mvc.RedirectResult. Salah satu manfaat dari Kerangka MVC open source berkaitan dengan kemampuan untuk mengeksplorasi cara kerja apa pun. Kelas CustomRedirectResult jauh lebih sederhana daripada yang setara dengan MVC, tetapi cukup untuk tujuan artikel ini.

Saat membuat instance dari kelas RedirectResult, kami meneruskan URL ke mana pengguna harus diarahkan. Metode ExecuteResult(), yang akan dieksekusi oleh Kerangka MVC setelah menyelesaikan metode tindakan, menerima Objek respons untuk meminta melalui objek ControllerContext yang disediakan oleh kerangka kerja dan memanggil metode RedirectPermanent() atau metode Redirect() (ini persis seperti yang dilakukan di dalam implementasi IController tingkat rendah dalam contoh sebelumnya di artikel).

Penggunaan kelas CustomRedirectResult diilustrasikan pada contoh di bawah ini, yang menunjukkan perubahan yang telah dilakukan pada pengontrol Derived:

// ... menggunakan ControllersAndActions.Infrastructure; namespace ControllersAndActions.Controllers ( public class DerivedController: Controller ( public ActionResult Index() ( // ... ) public ActionResult ProduceOutput() ( jika (Server.MachineName == "MyMachineName") mengembalikan CustomRedirectResult baru ( Url = "/Basic/ Index" ); else ( Response.Write("Controller: Derived, Metode Tindakan: ProduceOutput"); return null; ) ) ) )

Perhatikan bahwa kami telah dipaksa untuk mengubah hasil dari metode tindakan untuk mengembalikan ActionResult. Kami mengembalikan null jika kami tidak ingin Kerangka MVC melakukan apa pun saat metode tindakan kami telah selesai, yang akan dilakukan jika instance CustomRedirectResult tidak dikembalikan.

Pengontrol dan Tindakan Pengujian Unit

Banyak bagian dari Kerangka MVC dirancang untuk membuat pengujian unit lebih mudah, dan ini terutama berlaku untuk tindakan dan pengontrol. Ada beberapa alasan untuk dukungan ini:

    Anda dapat menguji tindakan dan pengontrol di luar server web. Objek konteks diakses melalui kelas dasarnya (seperti HttpRequestBase), yang mudah ditiru.

    Anda tidak perlu mengurai markup HTML untuk menguji hasil metode tindakan. Anda dapat memeriksa objek ActionResult yang dikembalikan untuk memastikan Anda mendapatkan hasil yang diharapkan.

    Emulasi permintaan klien tidak diperlukan. Sistem pengikatan model Kerangka MVC memungkinkan Anda untuk menulis metode tindakan yang menerima input dalam parameternya. Untuk menguji metode tindakan, Anda hanya perlu memanggilnya secara langsung dan memberikan nilai parameter yang sesuai.

Artikel selanjutnya tentang menghasilkan data dari pengontrol akan menunjukkan kepada Anda cara membuat pengujian unit untuk berbagai jenis hasil tindakan.

Jangan lupa bahwa pengujian unit hanyalah sebagian dari gambarannya. Perilaku kompleks dalam aplikasi terjadi ketika metode tindakan dipanggil secara berurutan. Pengujian unit paling baik dikombinasikan dengan pendekatan pengujian lainnya.

Sekarang setelah Anda mengetahui cara kerja hasil tindakan pengalihan kustom, Anda dapat beralih ke yang setara, yang disediakan oleh kerangka kerja MVC, yang kuat dan diuji secara ekstensif oleh Microsoft. Perubahan yang diperlukan untuk pengontrol Derived diberikan di bawah ini:

// ... public ActionResult ProduceOutput() ( mengembalikan new RedirectResult("/Basic/Index"); ) // ...

Dihapus dari metode tindakan operator bersyarat, yang berarti setelah menjalankan aplikasi dan membuka URL seperti /Derived/ProduceOutput , browser akan diarahkan ke URL seperti /Basic/Index. Untuk menyederhanakan kode metode tindakan, kelas Controller menyertakan metode praktis untuk menghasilkan berbagai macam objek ActionResult. Jadi, misalnya, kita bisa mendapatkan efek yang sama seperti pada contoh di atas dengan mengembalikan hasil dari metode Redirect():

// ... public ActionResult ProduceOutput() ( return Redirect("/Basic/Index"); ) // ...

Tidak ada yang rumit tentang sistem hasil tindakan, tetapi pada akhirnya membantu untuk mendapatkan kode yang lebih sederhana, lebih bersih, dan lebih konsisten yang mudah dibaca dan diuji unit. Misalnya, dalam kasus pengalihan, Anda cukup memeriksa apakah metode tindakan mengembalikan instance RedirectResult yang properti Urlnya berisi target yang diharapkan.

Kerangka MVC mendefinisikan banyak jenis hasil tindakan bawaan, yang dijelaskan dalam tabel di bawah ini:

Jenis Hasil Tindakan bawaan
Jenis Keterangan Metode Helper dari Controller Class
Lihat hasil

Membuat template tampilan yang ditentukan atau standar

Melihat()
Hasil Tampilan Sebagian

Membuat template tampilan parsial yang ditentukan atau standar

Tampilan Sebagian()
RedirectToRouteResult

Mengeluarkan HTTP 301 atau 302 redirect ke metode tindakan atau entri rute yang ditentukan, menghasilkan URL sesuai dengan konfigurasi perutean

RedirectToAction()
RedirectToActionPermanent()
RedirectToRoute()
RedirectToRoutePermanent()
RedirectResult

Mengeluarkan HTTP 301 atau 302 redirect ke URL yang diberikan

pengalihan()
PengalihanPermanen()
Hasil Konten

Mengembalikan data teks yang tidak diformat ke browser, secara opsional mengatur header tipe konten

isi()
FileHasil

Melewati data biner (seperti file pada disk atau array byte dalam memori) langsung ke browser

Mengajukan()
JsonHasil

Membuat serial objek .NET menjadi format JSON dan mengirimkannya sebagai tanggapan. Tanggapan semacam ini lebih sering dihasilkan saat menggunakan Alat web API dan AJAX

json()
Hasil JavaScript

Mengirim sepotong kode sumber JavaScript untuk dieksekusi oleh browser

JavaScript()
HttpHasil Tidak Sah

Menyetel kode status respons HTTP ke 401 (artinya "tidak diotorisasi"), yang menyebabkan mekanisme otentikasi saat ini (Otentikasi Formulir atau Otentikasi Windows) untuk meminta pengunjung masuk

Bukan
HttpNotFoundResult

Mengembalikan kesalahan HTTP dengan kode 404 - tidak ditemukan(tidak ditemukan)

HttpTidakDitemukan()
HttpStatusCodeHasil

Mengembalikan kode HTTP yang ditentukan

Bukan
Hasil Kosong

Tidak melakukan apapun

Bukan

Semua tipe ini diturunkan dari kelas ActionResult, dan banyak di antaranya memiliki metode pembantu yang praktis di kelas Controller. Kami akan mendemonstrasikan penggunaan jenis hasil ini di artikel berikutnya.

Katakanlah kita perlu mendapatkan data dari situs, yang pengumpulannya secara manual tidak praktis atau tidak mungkin karena volumenya. Dalam kasus seperti itu, kami dapat mengotomatiskan proses menggunakan alat yang dijelaskan di bawah ini.

permintaan perpustakaan

Pustaka Python untuk membuat permintaan ke server dan memproses tanggapan. Dasar dari skrip parsing dan senjata utama kami. Menggunakan perpustakaan ini, kami mendapatkan konten halaman dalam bentuk html untuk parsing lebih lanjut.

respon permintaan impor = permintaan . get ("https://ya.ru" ) # get-request print (respons .text ) # konten halaman cetak payload = ( "key1" : "value1" , "key2" : "value2" ) response = request . get("http://httpbin.org/get", params = payload ) # permintaan dengan parameter headers = ( "user-agent" : "my-app/0.0.1" ) response = request . dapatkan(url , tajuk = tajuk ) # permintaan dengan header html tertentu

API

Antarmuka pemrograman aplikasi - antarmuka pemrograman aplikasi yang disediakan oleh pemilik aplikasi web kepada pengembang lain. Kurangnya API yang dapat memenuhi kebutuhan kita adalah hal pertama yang harus dipastikan sebelum terburu-buru menganalisis sumber halaman dan menulis parser untuk itu. Banyak situs populer memiliki API dan dokumentasi mereka sendiri yang menjelaskan cara menggunakannya. Kami dapat menggunakan api dengan cara ini - kami membentuk permintaan http sesuai dengan dokumentasi, dan kami mendapatkan respons menggunakan permintaan.

BS4

Beautifulsoup4 adalah perpustakaan untuk mem-parsing dokumen html dan xml. Memungkinkan Anda mengakses langsung konten tag apa pun dalam html.

from bs4 import BeautifulSoup soup = BeautifulSoup (raw_html , "html.parser" ) print (sup . find ("p" , class_ = "some-class" ) .text ) # print isi tag "p" dengan class "some-class"

Selenium WebDriver

Data di situs dapat dihasilkan secara dinamis menggunakan javascript. Dalam hal ini, permintaan + bs4 tidak akan dapat mengurai data ini. Faktanya adalah bahwa bs4 mem-parsing kode sumber halaman tanpa menjalankan js. Untuk mengeksekusi kode js dan mendapatkan halaman yang identik dengan yang kita lihat di browser, Anda dapat menggunakan driver web Selenium - ini adalah satu set driver untuk browser yang berbeda, disertakan dengan perpustakaan untuk bekerja dengan driver ini.

Dan bagaimana jika ada otorisasi?

session = request.Session() data = ("login_username":"login", "login_password":"password") url = "http://site.com/login.php" response = session.post(url, data =data)

Tetapi bagaimana jika situs tersebut melarang banyak permintaan?

  • Setel penundaan antara permintaan:

response = request.get(url, timeout=(10, 0.01)) # batas waktu koneksi, batas waktu baca (dalam detik)

  • Berpura-pura menjadi browser menggunakan driver web Selenium atau dengan meneruskan konten header agen pengguna, membuat permintaan:

user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " "Gecko/20100101 Firefox/50.0") request = request.get(url, headers=("User-Agent":user_agent))

  • Gunakan proxy:

Terjemahan: Vlad Merzhevich

Semua orang tahu tentang formulir web, bukan? Tempel tagnya

, beberapa , mungkin , kami melengkapi semuanya dengan tombol dan selesai.

Anda tidak tahu setengahnya. HTML5 mendefinisikan lebih dari selusin jenis bidang baru yang dapat Anda gunakan dalam formulir Anda. Dan ketika saya mengatakan "gunakan", maksud saya mereka dapat digunakan sekarang - tanpa bantalan, peretasan, atau solusi apa pun. Jangan terlalu khawatir, saya tidak mengatakan bahwa semua fitur baru yang menarik ini sebenarnya didukung di setiap browser. Sama sekali tidak, saya tidak bermaksud untuk semua orang. PADA browser modern, ya, formulir Anda akan menunjukkan semua kemampuannya. Tetapi di browser yang lebih lama, formulir Anda akan tetap berfungsi, meskipun tidak sepenuhnya. Artinya, fitur-fitur ini menurun dengan anggun di setiap browser. Bahkan di IE6.

teks bantuan

Dukungan tooltip
YAITU Firefox safari Chrome Opera iPhone Android
- 4.0+ 4.0+ 4.0+ 11.0+ 4.0+ -

Peningkatan HTML5 pertama ke formulir adalah kemampuan untuk mengatur teks cepat di bidang input. Teks tersebut ditampilkan di bidang input jika bidang kosong dan tidak memiliki fokus. Segera setelah Anda mengklik di bidang input (atau menavigasi ke sana melalui Tab ), teks prompt menghilang.

Anda mungkin pernah melihat teks petunjuk sebelumnya. Sebagai contoh, Mozilla Firefox termasuk teks petunjuk di bilah alamat dengan tulisan "Cari di bookmark dan log".

Saat Anda mengklik bilah alamat, teks prompt menghilang.

Inilah cara Anda dapat memasukkan teks prompt dalam formulir Anda.


placeholder="(!LANG:Cari di bookmark dan riwayat" !}>

Browser yang tidak mendukung atribut placeholder abaikan saja. Tidak ada kerusakan atau kerusakan.

Tanya Profesor Markup

T. Dapatkah saya menggunakan markup HTML untuk atribut placeholder? Saya ingin menyisipkan gambar atau mungkin mengubah warna.

A. Atribut placeholder hanya boleh berisi teks, tanpa kode HTML. Namun, ada ekstensi CSS khusus yang memungkinkan Anda mengatur gaya teks di beberapa browser.

Bidang dengan fokus otomatis

Dukungan fokus otomatis
YAITU Firefox safari Chrome Opera iPhone Android
- - 4.0+ 3.0+ 10.0+ - -

Situs dapat menggunakan JavaScript untuk secara otomatis mendapatkan fokus pada bidang formulir pertama. Misalnya, di halaman utama Google.com autofocus ada di bidang untuk memasuki pencarian kata kunci. Meskipun ini nyaman bagi kebanyakan orang, ini dapat mengganggu pengguna tingkat lanjut dan orang-orang dengan kebutuhan khusus. Jika Anda menekan spasi sambil menunggu halaman digulir, tidak akan ada pengguliran karena fokusnya ada pada bidang input formulir (akan ada spasi yang diketik di bidang alih-alih menggulir). Jika Anda memindahkan fokus ke bidang input lain saat halaman sedang dimuat, skrip fokus otomatis situs dapat "membantu" memindahkan fokus kembali ke bidang input asli, mengganggu pengetikan Anda dan menyebabkan Anda mengetik di tempat yang salah.

Karena fokus otomatis bekerja melalui JavaScript, mungkin ada kerumitan untuk menangani ekstrem ini dan beberapa opsi bagi orang-orang yang tidak ingin halaman web "mencuri" fokus mereka.

Untuk mengatasi masalah ini, HTML5 memperkenalkan atribut fokus otomatis pada semua elemen formulir. Atribut fokus otomatis melakukan persis seperti apa bunyinya: segera setelah halaman dimuat, ia memindahkan fokus ke bidang yang ditentukan. Tetapi karena ini hanya markup dan bukan skrip, perilakunya akan konsisten di semua situs. Selain itu, produsen browser (atau pembuat ekstensi) dapat menawarkan kepada pengguna cara untuk menonaktifkan fokus otomatis.

Ini adalah bagaimana Anda dapat mengatur bidang formulir fokus otomatis.




Browser yang tidak mendukung atribut fokus otomatis akan mengabaikannya.

Apa? Maksud Anda, Anda ingin fokus otomatis berfungsi di mana saja, tidak hanya di browser HTML5 yang mewah? Anda dapat meninggalkan skrip saat ini dengan fokus otomatis, cukup buat dua perubahan kecil:

  • tambahkan atribut fokus otomatis ke kode HTML;
  • periksa apakah browser mendukung atribut fokus otomatis, dan jika tidak, jalankan skrip Anda sendiri.

Fokus otomatis dengan alternatif





Tetapkan fokus sedini mungkin

Banyak halaman web menunggu window.onload menyala dan mengatur fokus. Tetapi acara window.onload tidak akan aktif sampai semua gambar dimuat. Jika halaman Anda memiliki banyak gambar, skrip naif tersebut berpotensi mengubah fokus setelah pengguna mulai berinteraksi dengan bagian lain halaman Anda. Itu sebabnya pengguna tingkat lanjut benci skrip autofokus.

Misalnya, di bagian sebelumnya, skrip fokus otomatis ditempatkan tepat setelah bidang formulir yang dirujuk. dia solusi optimal, tetapi mungkin menyakiti perasaan Anda untuk menempatkan blok kode JavaScript di tengah halaman (atau lebih biasa, sistem Anda mungkin tidak begitu fleksibel). Jika Anda tidak dapat menyisipkan skrip di tengah halaman, Anda harus menyetel fokus melalui peristiwa khusus seperti $(document).ready() di jQuery alih-alih window.onload .

Fokus otomatis melalui jQuery









Acara khusus jQuery diaktifkan segera setelah DOM tersedia - yaitu, menunggu teks halaman dimuat, tetapi tidak menunggu semua gambar dimuat. Ini bukan pendekatan yang optimal - jika halamannya terlalu besar atau koneksi jaringan lambat, pengguna mungkin masih berinteraksi dengan halaman sebelum skrip dengan fokus dijalankan. Tapi itu masih jauh lebih baik daripada menunggu event window.onload diaktifkan.

Jika Anda setuju dan bersedia memasukkan skrip dengan satu pernyataan ke dalam kode halaman Anda, ini adalah kompromi yang tidak terlalu mengganggu dibandingkan opsi pertama dan lebih baik daripada opsi kedua. Anda dapat menggunakan acara khusus jQuery untuk mengatur acara Anda sendiri, misalnya autofocus_ready. Kemudian Anda dapat memanggil acara ini secara manual, tepat setelah bidang fokus otomatis tersedia. Terima kasih kepada E. M. Shtenberg karena telah mengajari saya teknik ini.

Fokus otomatis dengan acara khusus alternatif










Solusi ini optimal, seperti pendekatan pertama. Fokus akan disetel ke bidang formulir sesegera mungkin secara teknis saat teks halaman masih dimuat. Bagian dari logika aplikasi (fokus pada bidang formulir) telah dipindahkan dari badan halaman ke bagian . Contoh ini didasarkan pada jQuery, tetapi konsep acara khusus tidak unik untuk jQuery. Pustaka JavaScript lain seperti YUI dan Dojo menawarkan fungsionalitas serupa.

Mari kita rangkum.

  • Mendapatkan fokus yang tepat itu penting.
  • Jika memungkinkan, minta browser menggunakan atribut fokus otomatis pada bidang di mana Anda ingin fokus.
  • Jika Anda menggunakan kode alt untuk browser lama, tentukan dukungan untuk atribut fokus otomatis sehingga skrip hanya berjalan di browser lama.
  • Tetapkan fokus sedini mungkin. Tempel skrip fokus ke dalam kode segera setelah bidang formulir. Jika itu tidak mengganggu Anda, sematkan pustaka JavaScript yang mendukung acara khusus dan aktifkan acara dalam kode tepat setelah bidang formulir. Jika tidak memungkinkan, gunakan event seperti $(document).ready() dari jQuery.
  • Dalam situasi apa pun, tunggu window.onload untuk mengatur fokus.

Alamat email

Selama lebih dari sepuluh tahun, formulir hanya berisi beberapa jenis bidang. Yang paling umum adalah sebagai berikut.

Semua jenis bidang ini masih berfungsi di HTML5. Jika Anda "meningkatkan ke HTML5" (mungkin dengan mengubah !DOCTYPE ), Anda tidak perlu membuat satu perubahan pun pada formulir Anda. Hore untuk kompatibilitas mundur!

Namun, HTML5 mendefinisikan 13 jenis bidang baru dan tidak ada alasan untuk tidak mulai menggunakannya.

Yang pertama dari jenis alamat baru ini Surel. Terlihat seperti ini.





Saya akan menulis kalimat yang dimulai "di browser yang tidak mendukung type="email"..." tetapi berhenti. Mengapa? Karena tidak yakin apakah browser tidak mendukung type="email" . Semua browser "support" type="email" . Mereka mungkin tidak melakukan sesuatu yang istimewa, tetapi browser yang tidak mengenali type="email" akan memperlakukannya sebagai type="text" dan menjadikannya sebagai bidang teks biasa.

Saya akan menekankan betapa pentingnya ini. Ada jutaan formulir di Internet yang meminta alamat email dan semuanya menggunakan . Anda melihat bidang teks, masukkan alamat email Anda ke dalamnya dan hanya itu. Dan inilah HTML5, yang mendefinisikan type="email" . Apakah browser menjadi gila? Tidak. Setiap browser di bumi memperlakukan atribut type yang tidak diketahui sebagai type="text" - bahkan IE6. Jadi Anda dapat "memperbarui" formulir Anda dengan type="email" sekarang.

Apa yang terjadi jika, katakanlah, browser mendukung type="email" ? Yah, itu bisa berarti apa saja. Spesifikasi HTML5 tidak memerlukan antarmuka pengguna tertentu untuk jenis bidang baru. Opera mengisi bidang formulir dengan ikon kecil. Browser HTML5 lainnya seperti Safari dan Chrome dirender sebagai bidang teks - sama seperti type="text" - sehingga pengguna Anda tidak akan melihat perbedaannya (sampai mereka melihat kode sumbernya).

Dan kemudian ada iPhone.

IPhone tidak memiliki keyboard fisik. Semua "mengetik" dilakukan dengan mengetuk keyboard di layar yang muncul pada waktu yang tepat, seperti saat Anda menavigasi ke bidang formulir di halaman web. Apple melakukan sesuatu yang rumit di browser iPhone. Ini mengenali beberapa bidang HTML5 baru dan secara dinamis mengubah keyboard di layar untuk mengoptimalkan input.

Misalnya, alamat email adalah teks, bukan? Tentu, tapi itu jenis teks khusus. Misalnya, hampir semua alamat email berisi simbol @ dan setidaknya satu titik (.), tetapi tidak mungkin berisi spasi. Jadi saat Anda menggunakan iPhone dan menavigasi ke suatu elemen , Anda akan mendapatkan keyboard di layar yang berisi kurang dari ruang normal, serta tombol karakter khusus. dan @.

Biarkan saya meringkas. Tidak ada kerugian untuk segera menerjemahkan semua bidang Anda dengan alamat email di ketik="email" . Hampir tidak ada yang akan menyadarinya, kecuali pengguna iPhone, yang mungkin juga tidak. Tetapi mereka yang memperhatikan akan tersenyum lembut dan terima kasih telah membuat pekerjaan mereka sedikit lebih mudah.

Alamat web

Alamat web - yang oleh para kutu buku standar disebut URL, dengan pengecualian beberapa orang yang menyebut-nyebut URI - adalah jenis teks khusus lainnya. Sintaks alamat web dibatasi oleh standar Internet yang relevan. Jika seseorang meminta Anda memasukkan alamat web ke dalam formulir, mereka mengharapkan sesuatu seperti "http://www.google.com/", bukan "125 Farwood Road". Garis miring adalah umum - bahkan dalam halaman rumah Google memiliki tiga. Periode juga umum, tetapi spasi dilarang. Dan setiap alamat web memiliki akhiran domain seperti ".com" atau ".org".

Dan jadi... (tolong drumroll)... . Di iPhone, tampilannya seperti ini.

IPhone telah mengubah keyboard virtualnya seperti yang dilakukan untuk alamat email, tetapi sekarang telah mengoptimalkannya untuk mengetik alamat web. Spasi telah sepenuhnya digantikan oleh tiga tombol virtual: garis miring, titik, dan ".com" (Anda dapat menahan tombol ".com" untuk memilih akhiran yang berbeda seperti ".org" atau ".net").

Peramban yang tidak mendukung HTML5 akan memperlakukan type="url" seolah-olah itu type="text" , jadi tidak ada ruginya menggunakan jenis ini untuk semua bidang di mana Anda perlu memasukkan alamat web.

Angka sebagai penghitung

Langkah selanjutnya: angka. Meminta nomor lebih kompleks daripada meminta email atau alamat web. Pertama-tama, angka lebih rumit dari yang Anda pikirkan. Pilih nomor dengan cepat. -satu? Tidak, maksud saya angka antara 1 dan 10,7 ? Tidak, tidak, tidak sedikit pun, tolol. ? Sekarang Anda baru saja memilih bilangan irasional.

Saya ingin menunjukkan bahwa Anda tidak sering ditanya "hanya angka". Kemungkinan besar mereka akan meminta nomor dalam kisaran tertentu. Anda mungkin hanya menginginkan jenis angka tertentu dalam rentang itu - mungkin bilangan bulat, tetapi bukan pecahan atau desimal atau sesuatu yang lebih eksotis seperti kelipatan 10. HTML5 mencakup semua itu.

Pilih nomor, hampir semua

min="0"
maks="10"
langkah="2"
nilai="6">

Mari kita lihat satu atribut.

  • type="number" artinya adalah bidang numerik.
  • min="0" menentukan nilai minimum yang diizinkan untuk bidang ini.
  • max="10" adalah nilai maksimum yang diizinkan.
  • langkah="2" dikombinasikan dengan nilai minimum mendefinisikan angka yang valid dalam rentang: 0, 2, 4, dan seterusnya, hingga nilai maksimum.
  • nilai = "6" nilai default. Seharusnya terlihat familier, atribut yang sama selalu digunakan untuk menentukan nilai bidang formulir. Saya menyebutkannya di sini sebagai titik awal bahwa HTML5 didasarkan pada versi sebelumnya HTML. Anda tidak perlu belajar kembali untuk melakukan apa yang telah Anda lakukan sebelumnya.

Ini adalah kode bidang numerik. Perlu diingat bahwa semua atribut ini opsional. Jika Anda memiliki minimum tetapi tidak maksimum, Anda dapat menentukan atribut min, tetapi bukan atribut max. Nilai langkah default adalah 1, dan Anda dapat menghilangkan atribut langkah hingga nilai langkah yang berbeda diperlukan. Jika tidak ada nilai default, maka atribut value bisa berupa string kosong atau bahkan dihilangkan sama sekali.

Tapi HTML5 tidak berhenti di situ. Untuk rendah yang sama Harga rendah kebebasan Anda mendapatkan metode kenyamanan JavaScript ini.

  • input.stepUp(n) menaikkan nilai bidang sebesar n.
  • input.stepDown(n) menurunkan nilai bidang sebesar n.
  • input.valueAsNumber mengembalikan nilai saat ini sebagai float (properti input.value selalu berupa string).

Masalah tampilan? Nah, antarmuka yang benar untuk memanipulasi angka di browser diterapkan secara berbeda. Di iPhone, di mana mengetik sulit, browser kembali mengoptimalkan keyboard virtual untuk mengetik angka.

Pada Opera versi desktop, bidang type="number" muncul sebagai penghitung dengan sedikit panah atas dan bawah yang dapat Anda klik untuk mengubah nilainya.

Opera menghormati atribut min , max , dan step, jadi Anda akan selalu mendapatkan nilai numerik yang masuk akal. Jika Anda meningkatkan nilainya secara maksimal, panah atas di penghitung berubah menjadi abu-abu.

Seperti semua bidang masukan lain yang telah saya bahas dalam bab ini, browser yang tidak mendukung type="number" akan memperlakukannya sebagai type="text" . Nilai default akan ditampilkan di bidang (seperti yang disimpan dalam atribut nilai), tetapi atribut lain seperti min dan maks akan diabaikan. Anda bebas mengimplementasikannya sendiri, atau menggunakan kerangka kerja JavaScript yang sudah menerapkan manajemen penghitung. Cek dulu caranya di sini.

if(!.inputtypes.number)(
// tidak ada dukungan asli untuk field type=number
// mungkin mencoba Dojo atau kerangka kerja JavaScript lainnya
}

Nomor penggeser

Penghitung bukan satu-satunya cara untuk mewakili input angka. Anda mungkin juga pernah melihat slider yang terlihat seperti ini.

Sekarang Anda juga dapat memiliki slider pada formulir. Kode terlihat aneh mirip dengan bidang penghitung.

min="0"
maks="10"
langkah="2"
nilai="6">

Semua atribut yang tersedia sama dengan type="number" - min , max , step , value - dan artinya sama. Bedanya hanya di antarmuka pengguna. Alih-alih bidang input, browser diharapkan menampilkan type="range" sebagai penggeser. Pada saat menulis versi terbaru Safari, Chrome, dan Opera telah bekerja dengan ini. Sayangnya, iPhone ditampilkan sebagai bidang teks sederhana, bahkan tidak mengoptimalkan keyboard di layar untuk memasukkan angka. Semua browser lain hanya memperlakukan bidang tersebut sebagai type="text" , jadi tidak ada alasan untuk segera mulai menggunakan jenis itu.

HTML 4 tidak menyertakan pemilih tanggal melalui kalender. Kerangka kerja JavaScript memungkinkan Anda untuk menyiasatinya (Dojo , jQuery UI , YUI , Perpustakaan Penutupan), tetapi tentu saja masing-masing solusi ini memerlukan kerangka kerja untuk "disematkan" untuk kalender yang disematkan.

HTML5 akhirnya mendefinisikan cara untuk mengaktifkan pemilih tanggal bawaan tanpa skrip apa pun. Sebenarnya ada enam di antaranya: tanggal, bulan, minggu, waktu, tanggal + waktu, dan tanggal + waktu dengan zona waktu.

Sejauh ini, dukungan... langka.

Dukungan pemilih tanggal
Jenis Opera Peramban lain
ketik = "tanggal" 9.0+ -
jenis = "bulan" 9.0+ -
ketik = "minggu" 9.0+ -
ketik = "waktu" 9.0+ -
ketik = "waktu tanggal" 9.0+ -
ketik = "tanggal waktu lokal" 9.0+ -

Beginilah tampilan Opera :

Jika Anda membutuhkan waktu beserta tanggalnya, Opera juga mendukung :

Jika Anda membutuhkan satu bulan ditambah satu tahun (misalnya tanggal kedaluwarsa kartu kredit), Opera dapat menampilkan :

Kurang umum, tetapi tersedia, adalah pilihan minggu dalam setahun melalui :

Last but not least adalah waktu :

Pemilih tanggal dengan alternatif




...

Kemungkinan browser lain pada akhirnya akan mendukung jenis ini. Seperti type="email" dan jenis lainnya, bidang formulir ini akan ditampilkan sebagai teks biasa di browser yang tidak mengenali type="date" dan variannya. Jika Anda mau, Anda bisa menggunakan daripada membuat pengguna Opera senang dan menunggu browser lain menyusul. Lebih realistis untuk digunakan , tetapi periksa apakah browser memiliki dukungan pemilih tanggal bawaan, dan aktifkan solusi alternatif sebagai skrip pilihan Anda (Dojo , jQuery UI , YUI , Closure Library atau opsi lainnya).

Jendela pencarian

Jadi cari. Bukan hanya pencarian dari Google atau Yahoo (yah, itu juga). Pikirkan kotak pencarian apa pun, di halaman mana pun, di situs mana pun. Amazon memiliki kotak pencarian, Yandex memiliki kotak pencarian, sebagian besar blog juga memilikinya. Bagaimana mereka dibuat? , sama seperti bidang teks lainnya di web. Mari kita perbaiki ini.

Cari generasi baru




Di beberapa browser, Anda tidak akan melihat perbedaan dari bidang teks biasa. Tetapi jika Anda menggunakan Safari di Mac OS X, tampilannya akan seperti ini.

Menemukan perbedaan? Bidang input memiliki sudut membulat! Aku tahu, aku tahu, kamu hampir tidak bisa menahan perasaanmu. Tapi tunggu, bukan itu saja! Saat Anda mulai mengetik di bidang type="search", Safari akan memasukkan tombol "x" kecil dengan sisi kanan jendela. Mengklik "x" akan menghapus konten bidang. Google Chrome, yang memiliki teknologi yang sama di bawah tenda, berperilaku dengan cara yang sama. Kedua trik kecil ini terlihat dan berperilaku mirip dengan pencarian asli di iTunes dan aplikasi klien Mac OS X lainnya.

Apple.com menggunakan untuk menelusuri situs Anda, untuk membantu situs menyampaikan perasaan "mencintai". Tapi tidak ada yang khusus untuk Mac di sini. Ini hanya kode sehingga setiap browser di platform apa pun dapat memilih cara menampilkan sesuai dengan konvensi platform. Seperti semua jenis baru lainnya, browser yang tidak mengenali type="search" akan memperlakukannya sebagai type="text" , jadi sama sekali tidak ada alasan untuk tidak mulai menggunakan type="search" untuk semua kotak pencarian Anda hari ini. .

Profesor Markup mengatakan

Secara default, Safari tidak berlaku untuk kebanyakan gaya. Jika Anda ingin memaksa Safari memperlakukan bidang pencarian sebagai bidang teks biasa (untuk menerapkan gaya Anda sendiri), tambahkan aturan ini ke lembar gaya Anda.

memasukkan(
-penampilan webkit: bidang teks;
}

Terima kasih kepada John Lane karena telah mengajari saya trik ini.

Pemilihan warna

HTML5 juga mendefinisikan bidang , yang memungkinkan Anda memilih warna dan mengembalikannya dalam notasi heksadesimal. Tidak ada browser yang mendukung pemilihan warna, yang memalukan karena saya selalu menyukai palet Mac OS. Mungkin suatu hari.

Catatan. Penerjemah. Opera 11 mendukung fitur ini.

Validasi formulir

Dalam bab ini, saya telah berbicara tentang elemen formulir baru dan fitur baru seperti fokus otomatis, tetapi saya mungkin belum menyebutkan bagian paling menarik dari formulir HTML5: pemeriksaan otomatis memasukan data. Mari kita lihat masalah umum memasukkan alamat email dalam formulir. Anda mungkin memiliki validasi sisi klien melalui JavaScript diikuti dengan validasi sisi server melalui PHP, Python, atau bahasa sisi server lainnya. HTML5 tidak akan pernah menggantikan validasi sisi server, tetapi mungkin suatu hari nanti akan menggantikan validasi sisi klien.

Ada dua masalah besar dengan validasi alamat email JavaScript:

  1. Beberapa pengunjung Anda (mungkin sekitar 10%) tidak mengaktifkan JavaScript.
  2. Anda akan menerima alamat yang salah.

Serius, Anda akan mendapatkan alamat yang salah. Menentukan bahwa satu set karakter acak adalah alamat email yang valid sangat sulit. Semakin keras Anda melihat, semakin sulit. Apakah saya sudah mengatakan bahwa itu sangat, sangat sulit? Bukankah lebih mudah untuk menggantung sakit kepala ini di browser Anda?

Opera memeriksa jenis = "email"

Berikut adalah screenshot dari Opera 11, meskipun fungsinya telah ada sejak Opera 9. Kode tersebut mencakup pengaturan atribut type ke email. Saat pengguna Opera mencoba mengirimkan formulir dengan , browser secara otomatis memeriksa alamat email meskipun skrip dinonaktifkan.

HTML5 juga menawarkan validasi alamat web dengan bidang dan angka dengan . Validasi angka menghormati nilai atribut min dan max, jadi browser tidak akan mengizinkan Anda mengirimkan formulir jika Anda memasukkan angka yang terlalu besar.

Tidak ada kode untuk mengaktifkan validasi formulir di HTML5, ini dilakukan secara default. Untuk menonaktifkan validasi, gunakan atribut novalidate.

Jangan uji aku




Browser secara perlahan mengaktifkan dukungan validasi formulir di HTML5. Firefox 4 akan mendapat dukungan penuh. Sayangnya, Safari dan Chrome hanya mengimplementasikannya sebagian: mereka memvalidasi elemen formulir, tetapi tidak menampilkan pesan yang terlihat saat bidang formulir gagal divalidasi. Dengan kata lain, jika Anda memasukkan tanggal yang tidak valid (atau salah eja) di type="date" , Safari dan Chrome tidak akan mengirimkan formulir, tetapi tidak akan memberi tahu Anda alasannya. Mereka akan menetapkan fokus ke bidang yang berisi nilai yang tidak valid, tetapi tidak akan menampilkan pesan kesalahan seperti Opera atau Firefox 4.

Bidang yang harus diisi

Mendukung
YAITU Firefox safari Chrome Opera iPhone Android
- 4.0+ - - 9.0+ - -

Validasi formulir dalam HTML5 tidak terbatas pada jenis masing-masing bidang. Anda juga dapat menentukan bahwa bidang tertentu diperlukan, bidang tersebut harus memiliki nilai sebelum Anda dapat mengirimkan formulir.

Kode untuk bidang wajib diisi sesederhana mungkin.




Browser dapat mengubah tampilan default bidang wajib. Berikut adalah contoh tampilannya di Mozilla Firefox 4.0.

Juga, jika Anda mencoba mengirimkan formulir tanpa mengisi nilai yang diperlukan, Firefox akan menampilkan bilah informasi yang mengatakan bahwa bidang tersebut wajib diisi dan tidak boleh dibiarkan kosong.

Objek yang dijelaskan adalah alat yang sangat berguna dan kuat. Objek ini memiliki beberapa metode, deskripsinya diberikan di bawah ini:

Koleksi:

Metode:

Properti:

Respon.Koleksi kue

Koleksi Cookies menetapkan nilai untuk cookie. Jika cookie yang ditentukan tidak ada, cookie akan dibuat. Jika cookie ada, cookie akan mengambil nilai baru dan yang lama akan dimusnahkan.

Response.Cookies(cookie) [(key) | . atribut ] = nilai

Pilihan:

  • Kue kering- Nama kue
  • kunci- Parameter opsional. Jika ditentukan, maka cookie adalah direktori (bersarang) dan kuncinya adalah kumpulan nilai.
  • atribut- Informasi tertentu tentang cookie itu sendiri. Parameter ini dapat berupa salah satu dari berikut ini:
  • arti- Menunjukkan nilai yang akan diberikan kunci yang diberikan atau atribut.
NamaKeterangan
DomainRekam saja. Jika ditentukan, cookie hanya dikirim berdasarkan permintaan dari domain tersebut.
KedaluwarsaRekam saja. Tanggal cookie kedaluwarsa. Tanggal ini harus ditetapkan agar cookie dapat ditulis ke klien HDD setelah akhir sesi. Jika atribut ini tidak disetel, maka tanggal kedaluwarsa cookie diterima tanggal sekarang. Cookie akan kedaluwarsa segera setelah sesi berakhir.
memiliki kunciHanya membaca. Menunjukkan apakah cookie berisi kunci yang diberikan.
JalurRekam saja. Jika ditentukan, cookie hanya diteruskan berdasarkan permintaan dari jalur tersebut. Jika parameter tidak disetel, maka jalur ke aplikasi akan digunakan.
amanRekam saja. Menunjukkan apakah cookie akan dilindungi atau tidak.

Komentar:

Jika cookie dengan kunci dibuat seperti yang ditunjukkan pada skrip berikut,

<% Response.Cookies("mycookie")("type1") = "сахар" Response.Cookies("mycookie")("type2") = "печенье" %>

maka header berikut akan dikirim:

Set-Cookie:MYCOOKIE=TYPE1=gula&TYPE2=cookies

Jika Anda menetapkan nilai ke mycookie tanpa menggunakan kunci, maka tindakan ini akan menghancurkan kunci tipe1 dan tipe2. Sebagai contoh:<% Response.Cookies("myCookie") = "шоколадный зефир" %>

Pada contoh sebelumnya, kunci type1 dan type2 akan dimusnahkan dan nilainya akan hilang. Mycookie sekarang akan berisi nilai cokelat marshmallow.

Anda juga dapat memeriksa keberadaan kunci tertentu dengan cara berikut:

<% = Response.Cookies("myCookie").HasKeys %>

Jika TRUE ditampilkan, maka kunci seperti itu ada, dalam kasus FALSE - tidak.

Tanggapan.Metode Tulis

Respon.Tulis variabel_atau_nilai

Pilihan:

  • variabel_atau_nilai- Data yang akan ditampilkan pada layar browser melalui HTML. Parameter ini dapat berupa jenis apa pun yang didukung oleh VisualBasic Scripting Edition. Artinya, data dapat berupa: tanggal, string, karakter, nilai numerik. Nilai parameter ini tidak boleh berisi kombinasi %>. Sebagai gantinya, Anda dapat menggunakan kombinasi yang setara %\>. Server web akan menerjemahkan urutan ini ke urutan yang diperlukan saat skrip dijalankan.

Contoh berikut menunjukkan cara kerja metode Response.write untuk mencetak pesan ke klien.

Saya hanya akan memberitahu Anda:<%Response.write "Привет всем!!!"%>Dan namamu<%Response.write(Request.Form("name"))%>

Contoh berikut menambahkan tag HTML ke halaman web. Karena metode ini tidak dapat berisi kombinasi %>, kami menggunakan urutan %\>. Jadi contoh skrip:

<% Response.write "

" %>

Outputnya akan menjadi baris:

Respon.Metode pengalihan

Response.Redirect URL (URL - Uniform Resource Descriptor)

Pilihan:

  • URL- Parameter adalah deskriptor sumber daya generik. Ini menunjukkan kapan browser harus diarahkan.

Komentar:

Setiap kejadian metode ini antara tag dan halaman web akan diabaikan. Metode ini hanya dapat digunakan di header halaman HTML. Metode ini akan meneruskan header ke browser jika parameter URL objek dihilangkan dalam bentuk berikut:

HTTP/1.0 302 Objek Dipindahkan URL Lokasi

Respon. Metode akhir

Respon Selesai

Komentar:

Jika properti Response.Buffer telah disetel ke TRUE, maka memanggil metode Response.End akan menghapus buffer, mendorong data keluar darinya ke klien. Jika Anda tidak ingin menampilkan data kepada pengguna, Anda harus memanggil metode berikut:

<% Response.Clear Response.End %>

Respon. Metode AddHeader

Metode AddHeader menambahkan header HTML dengan nilai-nilai tertentu. Metode ini selalu menambahkan header baru ke respons ke browser klien. Metode ini tidak mengganti header yang ada dengan yang baru. Judul yang ditambahkan tidak dapat dihapus.

Metode ini hanya digunakan untuk tugas "lanjutan".

Response.AddHeader variabel_name, nilai

Pilihan:

  • variabel_nama- Nama opsi header HTML baru.
  • arti- Nilai yang akan disetel untuk diingat di header.

Catatan:

Untuk operasi yang benar metode, variable_name tidak boleh mengandung karakter garis bawah (_). Set ServerVariables menafsirkan garis bawah sebagai tanda hubung di header. Misalnya, skrip berikut memaksa server untuk menemukan parameter dari header HTML yang disebut MY-HEADER.

<% Requset.ServerVariables("HTTP_MY_HEADER") %>

Karena protokol HTTP mengharuskan semua parameter header diteruskan sebelum awal isi halaman HTML, Anda harus memanggil metode AddHeader dalam skrip Anda sebelum deskripsi dimulai. .... Ada satu pengecualian. Jika nilai properti Buffer disetel ke true (benar), maka Anda dapat menulis AddHeader kapan saja dalam skrip, tetapi sebelum panggilan pertama ke metode Flush. Jika tidak, memanggil metode AddHeader akan menimbulkan kesalahan.

Dua file .asp berikutnya menunjukkan poin terakhir.

<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%> teks Anda di halaman

Dalam contoh ini, halaman tidak disangga. Script berfungsi namun AddHeader dipanggil sebelum server menghasilkan output HTML ke klien.

<% Response.Buffer = true %> ini dia beberapa informasi halaman Anda...<%Response.AddHeader "Внимание!", "сообщение об ошибке"%> <%Response.Flush%> <%Response.Write("некий текст")%>

Dalam contoh kedua, halaman disangga dan, sebagai hasilnya, server tidak mengirim teks ke klien sampai skrip itu sendiri berakhir atau sampai metode Flush ditemukan. Anda dapat menggunakan metode ini untuk mengirim banyak salinan dari beberapa parameter header dengan nilai yang berbeda, seperti header WWW-Authenticate.

Respons Metode.AppendToLog

Metode AppendToLog menambahkan baris ke akhir file log server web. Anda dapat memanggil metode ini sebanyak yang Anda butuhkan. Setiap kali metode dipanggil, string yang Anda tentukan akan ditulis ke file laporan server.

Response.AppendToLog nilai

Pilihan:

  • arti- Teks yang akan ditambahkan ke file laporan server web. String ini tidak boleh berisi karakter koma (,). Selain itu, total panjang baris yang ditambahkan tidak boleh melebihi 80 karakter.

Catatan:

Untuk menggunakan fitur ini, Anda harus mengaktifkan opsi Kueri URI di panel "Properti Pencatatan Lanjutan" untuk server web ini di IIS.

Respon.MetodeBinaryWrite

Metode BinaryWrite memungkinkan Anda untuk menulis informasi yang ditentukan ke output HTTP saat ini tanpa konversi karakter apa pun. Metode ini berguna untuk menampilkan informasi non-string, seperti data biner yang dibutuhkan oleh suatu aplikasi.

Respon.BinaryWrite data

Pilihan:

  • data- Data yang ditujukan untuk keluaran HTTP.

Jika Anda memiliki objek yang menghasilkan larik byte, Anda dapat menggunakan panggilan berikut ke metode ini untuk meneruskan larik itu ke beberapa aplikasi yang berjalan di mesin klien.

<% Set BinGen = Server.CreateObject(My.BinaryGenerator) Pict = BinGen.MakePicture Response.BinaryWrite Pict %>

Tanggapan.Metode yang Jelas

Metode Clear menghapus semua output HTML yang di-buffer. Namun, metode ini tidak menghapus informasi header dari buffer. Anda dapat menggunakan metode ini untuk mengelola kesalahan. Namun, metode ini akan menghasilkan kesalahan jika properti Response.Buffer tidak benar.

Properti Response.CacheControl

Properti ini menimpa nilai default. Saat Anda mengatur properti ke Publik, server proxy dapat menyimpan output yang dihasilkan oleh ASP.

Response.CacheControl [= header kontrol cache]

Pilihan:

  • Header kontrol cache- Opsi kontrol judul ini dapat berupa Publik atau Pribadi.

Respon. Properti CharSet

Properti CharSet memungkinkan Anda untuk menambahkan nama tabel kode karakter (misalnya, WINDOWS-1251) ke header HTML, string tipe konten (tipe konten).

Response.CharSet codetable_name

Pilihan:

  • codetable_name- String yang menentukan tabel kode untuk halaman HTML yang diberikan. Nama tabel kode ini akan ditambahkan ke header file HTML di bawah parameter "content-type".

Untuk halaman ASP yang tidak menggunakan properti Response.Charset, parameter "tipe konten" di header akan menjadi:

tipe konten:teks/html

Jika file ASP berisi perintah

<%Response.Charset("Windows-1251")%>

kemudian di header bidang tipe konten akan terlihat seperti

tipe konten:teks/html; charset=Windows-1251

Komentar:

Fungsi ini menyisipkan string apa pun ke dalam header dan tidak memeriksa apakah sudah benar.

Jika halaman berisi beberapa tag Response.Charset, maka setiap tag berikutnya akan mengganti nilainya dengan nilainya sendiri.

Properti Response.ContentType

Properti ContentType memungkinkan Anda untuk menentukan tipe (tipe) konten file HTML. Jika properti ini tidak digunakan, defaultnya adalah teks/html.

Response.ContentType [=content_type]

Pilihan:

  • Jenis konten- String yang menjelaskan tipe konten HTML. String ini biasanya berbentuk "tipe/subtipe", di mana tipe adalah kategori konten utama dan subtipe menentukan tipe konten. Untuk mendapatkan daftar lengkap jenis yang didukung - lihat dokumentasi browser Anda atau spesifikasi HHTP.

Contoh berikut mengilustrasikan pengaturan tipe konten ke Format Definisi Saluran (Saluran Tekan).

<% Response.ContentType = "application/x-cdf" %>

Contoh kedua menunjukkan pengaturan properti ke nilai yang paling umum diketahui.

<% Response.ContentType = "text/HTML" %> <% Response.ContentType = "image/GIF" %> <% Response.ContentType = "image/JPEG" %>

Respon.Kedaluwarsa properti

Properti Expires menentukan jumlah waktu sampai halaman HTML di-cache oleh browser dianggap tidak kedaluwarsa (masa retensi). Jika pengguna meminta halaman yang di-cache dari browser yang belum kedaluwarsa, browser mengembalikannya langsung dari cache-nya.

Tanggapan.Kedaluwarsa [=angka]

Pilihan:

  • nomor- Jumlah waktu dalam menit sebelum halaman dianggap "terlambat". Menyetel nilai ini ke 0 menyebabkan halaman yang diberikan menjadi "kedaluwarsa" segera.

Komentar:

Jika properti ini disetel lebih dari sekali pada halaman, maka nilai terkecil yang digunakan.

Response.ExpiresAbsolute property

Properti ExpiresAbsolute menentukan waktu dan tanggal setelah halaman HTML yang di-cache oleh browser dianggap kedaluwarsa. Jika pengguna meminta halaman yang di-cache dari browser yang belum kedaluwarsa, browser mengembalikannya langsung dari cache-nya. Jika waktu ditentukan (dan tanggal ditentukan), maka "periode retensi" halaman berakhir pada tengah malam hari itu. Jika tidak ada waktu atau tanggal yang ditentukan, maka nilainya ditetapkan sesuai dengan hari dan waktu skrip dijalankan.

Response.ExpiresAbsolute [= [tanggal] [waktu]]

Pilihan:

  • tanggal- Menunjukkan tanggal kedaluwarsa "periode retensi". Format tanggal harus sesuai dengan standar RFC-1123.
  • waktu- Menunjukkan waktu saat halaman kedaluwarsa "periode retensi". Nilai ini dikonversi ke format GMT (Greenwich Mean Time) sebelum header dikirim ke klien.

Komentar:

Jika properti ini ditetapkan lebih dari sekali per halaman, maka waktu kedaluwarsa dari "periode retensi" diasumsikan paling cepat dari semua nilai yang ditentukan.

<% Response.ExpiresAbsolute = #May 31,1998 13:30:15# %>

Response.IsClientConnected properti

Properti ini adalah nilai hanya-baca, yang berarti tidak ada nilai yang dapat diberikan ke properti ini. Properti ini menunjukkan apakah klien terhubung atau belum terhubung ke server, seperti yang didefinisikan di bagian terakhir dari Response.Write.

Respon.IsClientConnected()

Komentar:

Properti ini memungkinkan Anda untuk menentukan kapan pengguna terhubung dan ketika dia terputus dari server. Misalnya, lamanya waktu antara saat server merespons dan saat klien membuat permintaan memberikan keyakinan bahwa klien masih terhubung dan masuk akal untuk terus mengeksekusi skrip.

<% "посмотрим, подключен ли пользователь If Not Response.IsClientConnected Then "получаем номер сессии и закрываем сессию Shutdownid = Session.SessionID "подготовка к закрытию сессии Shutdown(Shutdownid) End If %>

Response.Pis properti

Properti ini memungkinkan Anda untuk menambahkan nilai bidang label foto ke header respons.

Respon.PICS(PICSLabel)

Pilihan

  • Label Foto- String yang telah dikonversi ke format PICS - label. Nilai yang ditentukan dalam parameter ini ditambahkan ke header respons di bidang PICS.

Untuk file ASP termasuk:

<% Response.PICS("(PICS-1.1 label pada peringkat " & chr(34) & "1997.01.05T08:15-0500" hingga "1999.12.31T23:59-0000" (v 0 s 010 n 0))%>

Header berikutnya akan dibuat

PICS-label:(PICS-1.1 label pada peringkat "1997.01.05T08:15-0500" hingga "1999.12.31.T23:59-0000" (v 0 s 0 1 0 n 0))

Komentar:

Properti ini memungkinkan Anda untuk menyisipkan baris apa pun di header, terlepas dari apakah baris tersebut valid atau tidak.

Jika halaman berisi banyak tag yang berisi Response.PICS, maka setiap tag berikutnya akan menggantikan nilai yang sebelumnya.

Respon.Properti status

Properti ini memungkinkan Anda untuk menentukan string status yang dikembalikan oleh server. Nilai status ditentukan dalam spesifikasi HTTP.

Response.Status = state_description

Pilihan

  • state_description- String yang berisi tiga digit angka yang menunjukkan kode status dan juga deskripsi singkat tentang kode ini. Misalnya, 310 Bergerak Permanen.

Contoh berikut menunjukkan pengaturan status:

<% Response.Status = "401 Unauthorized" %>

Komentar:

Gunakan properti ini untuk mengubah string yang dikembalikan oleh server.

Artikel ini memberikan ringkasan tanggapan yang dapat diambil oleh organisasi atau proyek untuk mengelola risiko. Risiko dapat didefinisikan sebagai ketidakpastian hasil apakah positif (peluang) atau negatif (ancaman). Manajemen risiko sangat penting untuk keberhasilan proyek dan merupakan tugas manajemen risiko untuk mengelola eksposur proyek terhadap risiko ().

Tanggapan terhadap risiko tertentu harus mencerminkan jenis risiko, penilaian risiko (kemungkinan, dampak, kekritisan) dan sikap organisasi terhadap risiko. Ada sejumlah kemungkinan tanggapan terhadap risiko dan karena risiko dapat menjadi ancaman atau peluang, ini termasuk tanggapan yang cocok untuk peluang potensial. Tanggapan dirangkum dalam tabel di bawah ini.

Tabel respons risiko

respon risiko Deskripsi/contoh

Cocok untuk…. jenis risiko (ini adalah saran dan tidak lengkap)

Ancaman
Menghindari

Risiko dihindari dengan mengubah proyek dalam beberapa cara untuk menghindari risiko.

Beberapa risiko politik mis. opini publik yang merugikan. Beberapa risiko teknis/operasional/infrastruktur mis. masalah pemeliharaan. Risiko hukum dan peraturan, mis. kontrol peraturan, persyaratan lisensi.

Transfer

Beberapa risiko strategis/komersial mis. pencurian, kebangkrutan dapat diasuransikan. Lihat risiko bisnis untuk contoh lainnya.

Mengurangi

Tindakan diambil untuk mengurangi kemungkinan terjadinya risiko atau dampak yang akan ditimbulkannya.

Respons risiko yang paling sering digunakan.

Dapat diterapkan secara luas - Teknis/Operasional/Infrastruktur mis. kelalaian, kegagalan kinerja, ruang lingkup 'merayap', harapan yang tidak jelas.

Faktor organisasi/manajemen/manusia mis. bentrokan kepribadian, kepemimpinan yang buruk, dan pemilihan staf yang buruk.

Beberapa risiko politik, hukum dan peraturan, dan ekonomi/keuangan mungkin perlu diterima dengan suatu tempat, mis. perang dan kekacauan, fluktuasi nilai tukar.

Kemungkinan Di sini sebuah rencana dibuat untuk merespons jika risiko itu terwujud.

ekonomi/keuangan/pasar
Politik
hukum dan peraturan

Bisa dibilang semua risiko dapat dan harus memiliki rencana darurat.

Peluang
Bagikan Peluang dibagikan dengan mitra atau pemasok untuk memaksimalkan manfaat melalui penggunaan sumber daya/teknologi bersama, dll. Teknis/operasional/infrastruktur mis. teknologi baru, desain yang lebih baik.
Mengeksploitasi Sebuah proyek dapat disesuaikan untuk mengambil keuntungan dari perubahan teknologi atau pasar baru. Ekonomi/keuangan/pasar mis. pasar baru dan pasar berkembang, perubahan positif dalam nilai tukar atau suku bunga.
Meningkatkan Tindakan diambil untuk meningkatkan kemungkinan terjadinya peluang atau dampak positif yang dapat ditimbulkannya. Peluang strategis/komersial seperti kemitraan baru, penanaman modal baru, promotor baru.
Menolak Di sini tidak ada tindakan yang diambil dan kesempatan untuk mendapatkan keuntungan dari kesempatan itu ditolak. dapat diterapkan jika ada kesempatan. politik atau lingkungan mis. jaringan transportasi baru, perubahan pemerintahan yang membawa perubahan positif dalam kebijakan/peluang untuk melobi, dll.

Rencana darurat harus mengidentifikasi tindakan yang akan diambil jika risiko terjadi. Tindakan kontinjensi sering kali memiliki biaya terkait dan anggaran harus disisihkan dalam kasus bisnis untuk menutupi ini.

50 Risiko Bisnis Teratas dan cara mengelolanya!

20 Risiko Proyek Umum - contoh Daftar Risiko

Daftar Periksa 30 Risiko Konstruksi

Respons Risiko - referensi

Office of Government Commerce (2002), Mengelola Proyek yang Berhasil dengan PRINCE2, London: TSO.

The Projects Group plc, 2006, Tinjauan Manajemen Risiko, Sutton: The Projects Group plc.