itthon / Windows oktatóanyagok / Erős válaszok html. A Response objektum leírása. Email címek

Erős válaszok html. A Response objektum leírása. Email címek

A leírt objektum nagyon hasznos és hatékony eszköz. Ennek az objektumnak számos módszere van, ezek leírása az alábbiakban található:

Gyűjtemények:

Mód:

Tulajdonságok:

Response.Cookie-gyűjtés

A Cookie-gyűjtemény beállítja a cookie-k értékeit. Ha a megadott cookie-k nem léteznek, akkor létrehozza őket. Ha a süti létezik, akkor új értéket vesz fel, és a régi megsemmisül.

Válasz.Cookie-k(cookie) [(kulcs) | . attribútumok ] = érték

Lehetőségek:

  • aprósütemény- Cookie név
  • kulcs- Opcionális paraméter. Ha meg van adva, akkor a cookie egy könyvtár (beágyazott), a kulcs pedig egy értékkészlet.
  • attribútumokat- Meghatározott információk magukról a sütikről. Ez a paraméter a következők egyike lehet:
  • jelentése- Megadja az adott kulcshoz vagy attribútumhoz rendelendő értéket.
NévLeírás
TartományCsak rögzíteni. Ha meg van adva, a cookie-k csak az adott domain kérésére kerülnek elküldésre.
LejárCsak rögzíteni. A süti lejárati dátuma. Ezt a dátumot kell beállítani ahhoz, hogy a cookie-t az ügyfélnek írják HDD az ülés vége után. Ha ez az attribútum nincs beállítva, akkor a cookie lejárati dátuma elfogadásra kerül mostani dátum. A sütik a munkamenet vége után azonnal lejárnak.
kulcsa vanCsak olvasni. Azt jelzi, hogy a cookie tartalmazza-e az adott kulcsot.
PályaCsak rögzíteni. Ha meg van adva, a cookie csak kérésre kerül átadásra erről az útvonalról. Ha a paraméter nincs beállítva, akkor a rendszer az alkalmazás elérési útját használja.
biztonságosCsak rögzíteni. Azt jelzi, hogy a cookie védett lesz-e vagy sem.

Megjegyzés:

Ha a kulccsal rendelkező cookie a következő szkriptben látható módon jön létre,

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

akkor a következő fejléc kerül elküldésre:

Set-Cookie:MYCOOKIE=TYPE1=cukor&TYPE2=sütik

Ha kulcsok használata nélkül rendel értéket a mycookie-hoz, akkor ez a művelet megsemmisíti a type1 és type2 kulcsokat. Például:<% Response.Cookies("myCookie") = "шоколадный зефир" %>

Az előző példában a type1 és type2 kulcsok megsemmisülnek, és értékeik elvesznek. A Mycookie mostantól a csokoládé marshmallow értéket fogja tartalmazni.

Egy adott kulcs létezését a következő módon is ellenőrizheti:

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

Ha az IGAZ felirat jelenik meg, akkor létezik ilyen kulcs, FALSE esetén nem.

Response.Write Method

Response.Írja be a változó_vagy_értékét

Lehetőségek:

  • változó_vagy_érték- A böngésző képernyőjén HTML-en keresztül megjelenítendő adatok. Ez a paraméter bármilyen, a VisualBasic Scripting Edition által támogatott típus lehet. Vagyis az adatok típusai lehetnek: dátum, karakterlánc, karakter, numerikus értékek. Jelentése adott paramétert nem tartalmazhat %> kombinációt. Ehelyett használhatja a megfelelő %\> kombinációt. A webszerver lefordítja ezt a szekvenciát a szükségessé a szkript végrehajtásakor.

A következő példa azt mutatja be, hogyan működik a Response.write metódus üzenetek kinyomtatására az ügyfélnek.

Csak annyit mondok:<%Response.write "Привет всем!!!"%>És a neved<%Response.write(Request.Form("name"))%>

A következő példa egy HTML-címkét ad hozzá egy weboldalhoz. Mivel ez a metódus nem tartalmazhatja a %> kombinációt, a %\> szekvenciát használjuk. Tehát egy példa szkript:

<% Response.write "

" %>

A kimenet a következő sor lesz:

Response.Redirect metódus

Response.Redirect URL (URL - Egységes erőforrás-leíró)

Lehetőségek:

  • URL- A paraméter egy általános erőforrás-leíró. Azt jelzi, hogy mikor kell átirányítani a böngészőt.

Megjegyzés:

A metódus bármilyen előfordulása a címkék között és weboldalakat figyelmen kívül hagyja. Ez a módszer csak egy HTML-oldal fejlécében használható. Ez a metódus átadja a fejlécet a böngészőnek, ha az objektum URL paramétere kimarad a következő formában:

HTTP/1.0 302 Objektum áthelyezett hely URL

Response.End metódus

Válasz vége

Megjegyzés:

Ha a Response.Buffer tulajdonság TRUE értékre van állítva, akkor a Response.End metódus kiüríti a puffert, és kiküldi belőle az adatokat a kliensnek. Ha nem szeretne adatokat megjeleníteni a felhasználó számára, akkor a következő metódust kell meghívnia:

<% Response.Clear Response.End %>

Response.AddHeader Method

Az AddHeader metódus egy HTML-fejlécet ad hozzá meghatározott értékekkel. Ez a módszer mindig új fejlécet ad az ügyfélböngészőnek adott válaszhoz. Ez a módszer nem cserél egy meglévő fejlécet újra. A hozzáadott cím nem távolítható el.

Ez a módszer csak „haladó” feladatokhoz használható.

Response.AddHeader változó_neve, értéke

Lehetőségek:

  • változó_neve- Az új HTML-fejlécbeállítások neve.
  • jelentése- A fejlécben megjegyzendő beállítandó érték.

Megjegyzések:

A metódus megfelelő működéséhez a változó_neve nem tartalmazhatja az aláhúzás karaktert (_). A ServerVariables készlet az aláhúzást kötőjelként értelmezi a fejlécben. Például a következő szkript arra kényszeríti a szervert, hogy keressen egy paramétert a MY-HEADER nevű HTML-fejlécből.

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

Mivel a HTTP protokoll megköveteli, hogy az összes fejlécparamétert a HTML-oldal törzsének eleje előtt átadják, a leírás megkezdése előtt meg kell hívnia az AddHeader metódust a szkriptben. .... Egy kivétel van. Ha a Buffer tulajdonság értéke igaz (true), akkor a szkript bármely pontjára írhatja az AddHeader-t, de a Flush metódus első hívása előtt. Ellenkező esetben az AddHeader metódus meghívása hibát jelez.

A következő két .asp fájl az utolsó pontot mutatja be.

<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%> szövegét az oldalon

NÁL NÉL ezt a példát az oldal nincs pufferelve. A szkript működik, azonban az AddHeader meghívásra kerül, mielőtt a szerver HTML-kimenetet állítana elő a kliensnek.

<% Response.Buffer = true %> itt van néhány információ az oldaladról...<%Response.AddHeader "Внимание!", "сообщение об ошибке"%> <%Response.Flush%> <%Response.Write("некий текст")%>

A második példában az oldal pufferelt, és ennek eredményeként a szerver nem küldi el a szöveget a kliensnek, amíg maga a szkript le nem fejeződik, vagy amíg a Flush metódus nem találkozik. Ezzel a módszerrel néhány fejlécparaméter több példányát is elküldheti különböző értékekkel, például a WWW-Authenticate fejléc esetében.

Módszer Response.AppendToLog

Az AppendToLog metódus egy sort fűz a webszerver naplófájljának végéhez. Ezt a módszert annyiszor hívhatja meg, ahányszor szüksége van. A metódus minden egyes meghívásakor a megadott karakterlánc a kiszolgáló jelentésfájljába kerül.

Response.AppendToLog érték

Lehetőségek:

  • jelentése- A webszerver jelentésfájljához hozzáadandó szöveg. Adott sor nem tartalmazhat vesszőt (,). Ezenkívül a hozzáadott sor teljes hossza nem haladhatja meg a 80 karaktert.

Megjegyzések:

A szolgáltatás használatához engedélyeznie kell az URI-lekérdezés beállítást a „Speciális naplózási tulajdonságok” panelen ehhez a webkiszolgálóhoz az IIS-ben.

Response.BinaryWrite metódus

A BinaryWrite metódus lehetővé teszi a megadott információk kiírását az aktuális HTTP kimenetre karakterkonverzió nélkül. Ez a módszer hasznos nem karakterlánc jellegű információk, például egy alkalmazás által igényelt bináris adatok megjelenítéséhez.

Response.BinaryWrite adatok

Lehetőségek:

  • adat- HTTP kimenetre szánt adatok.

Ha van egy objektuma, amely egy bájttömböt állít elő, akkor a metódus következő meghívásával átadhatja a tömböt az ügyfélgépen futó alkalmazásoknak.

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

Válasz. Tiszta módszer

A Clear metódus törli az összes pufferelt HTML-kimenetet. Ez a módszer azonban nem törli a fejléc információkat a pufferből. Ezzel a módszerrel kezelheti a hibákat. Ez a módszer azonban hibát eredményez, ha a Response.Buffer tulajdonság nem igaz.

Response.CacheControl tulajdonság

Ez a tulajdonság felülírja az alapértelmezett értéket. Ha a tulajdonságot Public értékre állítja, a proxyszerver gyorsítótárazhatja az ASP által generált kimenetet.

Response.CacheControl [= gyorsítótárvezérlő fejléc]

Lehetőségek:

  • Gyorsítótár-vezérlő fejléc- Ez a címvezérlési lehetőség lehet nyilvános vagy privát.

Response.CharSet tulajdonság

A CharSet tulajdonság lehetővé teszi a karakterkódtábla nevének (például WINDOWS-1251) hozzáadását a HTML fejléchez, a tartalom típusú karakterlánchoz (tartalomtípus).

Response.CharSet kódtábla_neve

Lehetőségek:

  • kódtábla_neve- Az adott HTML oldal kódtáblázatát meghatározó karakterlánc. Ennek a kódtáblázatnak a neve bekerül a HTML-fájl fejlécébe a "content-type" paraméter alatt.

Olyan ASP-oldalak esetében, amelyek nem használják a Response.Charset tulajdonságot, a "content-type" paraméter a fejlécben a következő lesz:

content-type:text/html

Ha az ASP fájl tartalmazza a parancsot

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

akkor a fejlécben a tartalomtípus mező így fog kinézni

content-type:text/html; charset=Windows-1251

Megjegyzés:

Ez a függvény bármilyen karakterláncot beszúr a fejlécbe, és nem ellenőrzi, hogy helyes-e.

Ha az oldal több Response.Charset címkét tartalmaz, akkor minden következő címke lecseréli az értéket a sajátjára.

Response.ContentType tulajdonság

A ContentType tulajdonság lehetővé teszi a HTML-fájl tartalmának típusának (típusának) megadását. Ha egy adott ingatlan nincs használatban, alapértelmezés szerint text/html.

Response.ContentType [=tartalom_típus]

Lehetőségek:

  • A tartalom típusa- A HTML tartalomtípust leíró karakterlánc. Ez a karakterlánc általában "típus/altípus" formátumú, ahol a típus a fő tartalomkategória, az altípus pedig a tartalom típusát határozza meg. Megszerzéséért teljes lista támogatott típusok – tekintse meg böngészője dokumentációját vagy a HHTP specifikációját.

A következő példa a tartalomtípus csatornadefiníciós formátumra (push csatornák) történő beállítását mutatja be.

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

A második példa a tulajdonság legáltalánosabban ismert értékekre való beállítását mutatja be.

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

Response.Expires property

Az Expires tulajdonság megadja, hogy mennyi ideig tart HTML oldal A böngésző által gyorsítótárban tárolt adatok nem járnak le (megőrzési időszak). Ha a felhasználó egy olyan böngészőtől kér egy gyorsítótárazott oldalt, amely még nem járt le, a böngésző közvetlenül a gyorsítótárából küldi vissza.

Válasz.Lejár [=szám]

Lehetőségek:

  • szám- Az az idő percekben, amíg egy oldal „késésnek” minősül. Ha ezt az értéket 0-ra állítja, az adott oldal azonnal "lejárt".

Megjegyzés:

Ha ez a tulajdonság egy oldalon többször van beállítva, akkor a legkisebb érték kerül felhasználásra.

Response.ExpiresAbsolute tulajdonság

Az ExpiresAbsolute tulajdonság azt az időt és dátumot adja meg, amely után a böngésző által gyorsítótárazott HTML-oldal lejártnak minősül. Ha a felhasználó egy olyan böngészőtől kér egy gyorsítótárazott oldalt, amely még nem járt le, a böngésző közvetlenül a gyorsítótárából küldi vissza. Ha meg van adva időpont (és dátum is meg van adva), akkor az oldal „megőrzési ideje” az adott nap éjfélkor jár le. Ha sem az idő, sem a dátum nincs megadva, akkor az érték a szkript futtatásának napjának és időpontjának megfelelően lesz hozzárendelve.

Response.ExpiresAbsolute [= [dátum] [idő]]

Lehetőségek:

  • dátum- A „megőrzési időszak” lejárati dátumát jelzi. A dátumformátumnak meg kell felelnie az RFC-1123 szabványnak.
  • idő- Azt az időt jelzi, amikor az oldal "megőrzési időszak" lejár. Adott érték GMT (Greenwich Mean Time) formátumra konvertálódik, mielőtt a fejlécet elküldené az ügyfélnek.

Megjegyzés:

Ha ezt a tulajdonságot oldalanként többször adják meg, akkor a „megőrzési időszak” lejárati idejét feltételezi a legkorábbi érték az összes megadott érték közül.

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

Response.IsClientConnected tulajdonság

Ez a tulajdonság csak olvasható érték, ami azt jelenti, hogy ehhez a tulajdonsághoz nem lehet értékeket rendelni. Ez a tulajdonság azt jelzi, hogy a kliens csatlakozik-e vagy még nem csatlakozik a kiszolgálóhoz, a Response.Write utolsó részében meghatározottak szerint.

Response.IsClientConnected()

Megjegyzés:

Ez a tulajdonság lehetővé teszi annak meghatározását, hogy a felhasználó mikor csatlakozik, és mikor nincs kapcsolat a szerverrel. Például a szerver válaszadása és az ügyfél kérése között eltelt idő bizonyosságot ad arról, hogy az ügyfél továbbra is csatlakozik, és ésszerű a szkript végrehajtásának folytatása.

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

Response.Pics tulajdonság

Ez a tulajdonság lehetővé teszi a pics-label mező értékének hozzáadását a válaszfejléchez.

Response.PICS(PICSLabel)

Lehetőségek

  • Képek címke- PICS formátumba konvertált karakterlánc - címke. Az ebben a paraméterben megadott érték hozzáadódik a válasz fejlécéhez a PICS mezőben.

ASP-fájlhoz, amely tartalmazza:

<% Response.PICS("(PICS-1.1 címkék a "& chr(34) és "1997.01.05T08:15-0500" és "1999.12.31T23:59-0000" értékeléseken (v 0 s 010 n 0))%>

A következő fejléc jön létre

PICS-címke:(PICS-1.1 címkék az "1997.01.05T08:15-0500" és az "1999.12.31.T23:59-0000" értékelésen (v 0 s 0 1 0 n 0))

Megjegyzés:

Ez a tulajdonság lehetővé teszi bármilyen sor beszúrását a fejlécbe, függetlenül attól, hogy a sorok érvényesek-e.

Ha az oldal sok Response.PICS címkét tartalmaz, akkor mindegyik következő helyettesíti az előző értékét.

Response.Status tulajdonság

Ez a tulajdonság lehetővé teszi a kiszolgáló által visszaadott állapotkarakterlánc megadását. Az állapotértékeket a HTTP specifikáció határozza meg.

Response.Status = állapotleírás

Lehetőségek

  • állapot_leírás- Egy karakterlánc, amely egy háromjegyű számot tartalmaz, amely jelzi az állapotkódot, és egy rövid leírást is tartalmaz a kódról. Például: 310 Move Permanently.

A következő példa az állapotbeállítást mutatja be:

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

Megjegyzés:

Ezzel a tulajdonsággal módosíthatja a kiszolgáló által visszaadott karakterláncot.

Fordítás: Vlad Merzhevics

Mindenki ismeri a webes űrlapokat, igaz? Illessze be a címkét
, több , lehet , mindezt a gombbal egészítjük ki és kész.

A felét sem tudod. A HTML5 több mint egy tucat új mezőtípust határoz meg, amelyeket felhasználhat az űrlapokon. És amikor azt mondom, hogy "használd", arra gondolok, hogy most is használhatók - mindenféle pad, hack vagy kerülő megoldás nélkül. Ne aggódjon, nem azt mondom, hogy ezeket az izgalmas új funkciókat minden böngésző támogatja. Egyáltalán nem, nem mindenkire gondolok. A modern böngészőkben igen, az űrlapok mindent megmutatnak, amit csak tudnak. A régebbi böngészőkben azonban az űrlapok továbbra is működnek, bár nem teljesen. Vagyis ezek a funkciók kecsesen leromlanak minden böngészőben. Még IE6-ban is.

Súgó szöveg

Eszköztipp támogatás
AZAZ Firefox szafari Króm Opera iPhone Android
- 4.0+ 4.0+ 4.0+ 11.0+ 4.0+ -

Az űrlapok első HTML5-fejlesztése az a képesség, hogy a beviteli mezőben azonnali szöveget állíthatunk be. Ilyen szöveg jelenik meg a beviteli mezőben, ha a mező üres és nincs fókuszban. Amint rákattint a beviteli mezőre (vagy a Tab segítségével navigál rá), a felszólító szöveg eltűnik.

Valószínűleg láttál már utaló szöveget. Például a Mozilla Firefox a címsávban „Keresés a könyvjelzők és előzmények között” szöveget tartalmaz.

Ha a címsorra kattint, a felszólító szöveg eltűnik.

A következőképpen helyezhet el prompt szöveget űrlapjaiba.


placeholder="(!LANG:Keresés a könyvjelzőkben és az előzményekben" !}>

Azok a böngészők, amelyek nem támogatják a helyőrző attribútumot, egyszerűen figyelmen kívül hagyják azt. Nincs kár vagy kár.

Kérdezd meg Markup professzort

☞ K. Használhatok HTML-jelölést a helyőrző attribútumhoz? Szeretnék képet beszúrni, esetleg színeket változtatni.

V. A helyőrző attribútum csak szöveget tartalmazhat, HTML-kódot nem. Vannak azonban speciális CSS-bővítmények, amelyek lehetővé teszik a szövegstílus beállítását egyes böngészőkben.

Mezők autofókusszal

Autofókusz támogatás
AZAZ Firefox szafari Króm Opera iPhone Android
- - 4.0+ 3.0+ 10.0+ - -

A webhelyek JavaScript használatával automatikusan az első űrlapmezőre fókuszálhatnak. Például a főoldalon Google.com Az autofókusz a keresési kulcsszavak bevitelére szolgáló mezőben található. Bár ez a legtöbb ember számára kényelmes, a haladó felhasználók és a speciális igényű emberek számára bosszantó lehet. Ha megnyomja a szóköz billentyűt, miközben várja az oldal görgetését, akkor nem lesz görgetés, mert a fókusz az űrlap beviteli mezőjén van (a mezőbe görgetés helyett szóköz kerül). Ha az oldal betöltése közben áthelyezi a fókuszt egy másik beviteli mezőre, a webhely autofókusz-szkriptje „hasznos módon” visszahelyezheti a fókuszt az eredeti beviteli mezőre, ami megszakítja a gépelést, és rossz helyre írja a gépelést.

Mivel az automatikus élességállítás JavaScripten keresztül működik, bonyolult lehet ezeket a szélsőségeket kezelni, és kevés lehetőség van azoknak, akik nem akarják, hogy egy weboldal „ellopja” a fókuszt.

E problémák megoldása érdekében a HTML5 minden űrlapelemen bevezeti az autofókusz attribútumot. Az autofókusz attribútum pontosan azt csinálja, aminek hangzik: amint az oldal betöltődik, a fókuszt a megadott mezőre helyezi. De mivel ez csak jelölés és nem szkript, a viselkedés minden webhelyen egységes lesz. Ezenkívül a böngészőgyártók (vagy a bővítmények készítői) lehetőséget kínálhatnak a felhasználóknak az automatikus élességállítás kikapcsolására.

Így állíthat be egy automatikus élességállítási űrlapmezőt.




Az autofókusz attribútumot nem támogató böngészők figyelmen kívül hagyják azt.

Mit? Azt akarja mondani, hogy az autofókusz mindenhol működjön, ne csak a divatos HTML5 böngészőkben? Az aktuális szkriptet elhagyhatja az automatikus élességállítással, csak két apró változtatást kell végrehajtania:

  • adja hozzá az autofocus attribútumot a HTML-kódhoz;
  • ellenőrizze, hogy a böngésző támogatja-e az autofókusz attribútumot, és ha nem, futtassa a saját szkriptjét.

Autofókusz alternatívával





Állítsa be a fókuszt a lehető legkorábban

Sok weboldal arra vár, hogy a window.onload aktiválódjon és fókuszba állítsa. De a window.onload esemény nem indul el, amíg az összes kép be nem töltődik. Ha az oldalon sok kép található, az ilyen naiv szkriptek potenciálisan megváltoztatják a fókuszt, miután a felhasználó interakcióba lép az oldal egy másik részével. Ez az oka annak, hogy a hatékony felhasználók utálják az autofókuszos szkripteket.

Például az előző részben az autofókusz szkript közvetlenül a hivatkozott űrlapmező mögé kerül. Ez az optimális megoldás, de sértheti az érzéseit, ha egy JavaScript-kód blokkot helyez el az oldal közepére (vagy hétköznapibb, lehet, hogy a rendszer nem olyan rugalmas). Ha nem tud szkriptet beszúrni az oldal közepére, akkor a fókuszt egy egyéni eseményen keresztül kell beállítania, például a $(document).ready() segítségével a jQuery-ben a window.onload helyett.

Autofókusz a jQuery segítségével









A jQuery egyéni esemény azonnal aktiválódik, amint a DOM elérhető – vagyis megvárja az oldal szövegének betöltését, de nem várja meg az összes kép betöltését. Ez nem optimális megközelítés – ha az oldal szokatlanul nagy, vagy a hálózati kapcsolat lassú, előfordulhat, hogy a felhasználó még mindig interakcióba lép az oldallal a fókuszszkript végrehajtása előtt. De még mindig sokkal jobb, mint várni a window.onload esemény aktiválására.

Ha egyetért, és hajlandó egyetlen utasításszkriptet beilleszteni az oldal kódjába, ez egy olyan kompromisszum, amely kevésbé kellemetlen, mint az első lehetőség, és jobb, mint a második. A jQuery egyéni események segítségével beállíthatja saját eseményeit, például az autofocus_ready-t. Ezután manuálisan hívhatja meg ezt az eseményt, közvetlenül azután, hogy az autofókusz mező elérhető. Köszönöm E. M. Shtenbergnek, hogy megtanította nekem ezt a technikát.

Autofókusz alternatív egyéni eseménnyel










Ez a megoldás az első megközelítéshez hasonlóan optimális. A fókusz az űrlapmezőre kerül, amint az technikailag lehetséges, miközben az oldal szövege még betöltődik. Az alkalmazáslogika egy része (a fókusz az űrlapmezőre) átkerült az oldaltörzsből a szakaszba . Ez a példa a jQuery-n alapul, de az egyéni események fogalma nem egyedülálló a jQuery esetében. Más JavaScript-könyvtárak, például a YUI és a Dojo hasonló funkciókat kínálnak.

Foglaljuk össze.

  • Fontos a megfelelő fókuszálás.
  • Ha lehetséges, kérje meg a böngészőt, hogy használja az autofókusz attribútumot azon a mezőn, amelyre fókuszálni kíván.
  • Ha alt kódot használ régebbi böngészőkhöz, határozza meg az autofókusz attribútum támogatását, hogy a szkript csak régebbi böngészőkben fusson.
  • Állítsa be a fókuszt a lehető legkorábban. Illessze be a fókuszszkriptet a kódba közvetlenül az űrlapmező után. Ha ez nem zavarja, helyezzen be egy JavaScript-könyvtárat, amely támogatja az egyéni eseményeket, és aktiválja az eseményt a kódban közvetlenül az űrlapmező után. Ha ez nem lehetséges, használjon olyan eseményt, mint a $(document).ready() a jQuery-ből.
  • Semmi esetre se várja meg, amíg a window.onload beállítja a fókuszt.

Email címek

Több mint tíz éve az űrlapok csak néhány típusú mezőt tartalmaznak. A leggyakoribbak a következők.

Ezen mezőtípusok mindegyike továbbra is működik HTML5-ben. Ha "frissít a HTML5-re" (talán a !DOCTYPE módosításával), akkor egyetlen változtatást sem kell végrehajtania az űrlapokon. Hurrá a visszafelé kompatibilitásért!

A HTML5 azonban 13 új mezőtípust határoz meg, és nincs ok arra, hogy ne kezdjük el használni őket.

Az új típusok közül az első az e-mail cím. Így néz ki.





Egy mondatot akartam írni, ami úgy kezdődött, hogy "a böngészőkben, amelyek nem támogatják a type="emailt"..." de abbamaradt. Miért? Mert nem biztos, hogy a böngészők nem támogatják-e a type="email"-t. Minden böngésző "support" type="email" . Lehet, hogy nem csinálnak semmi különlegeset, de a type="email"-t nem ismerő böngészők type="text"-ként kezelik, és normál szövegmezőként jelenítik meg.

Hangsúlyozom, hogy ez mennyire fontos. Az interneten több millió űrlap található, amelyek e-mail címet kérnek, és mindegyik használja . Látsz egy szövegmezőt, beírod az e-mail címedet és kész. És itt jön a HTML5, amely a type="email"-t határozza meg. Megőrülnek a böngészők? Nem. A földön minden böngésző az ismeretlen típusú attribútumot type="text"-ként kezeli – még az IE6 is. Így már most "frissítheti" űrlapjait a type="email" használatával.

Mi történik, ha mondjuk a böngésző támogatja a type="email" funkciót? Nos, ez bármit jelenthet. A HTML5 specifikáció nem igényel különösebb felhasználói felületet az új mezőtípusokhoz. Az Opera egy kis ikonnal párnázza ki az űrlapmezőt. Más HTML5-böngészők, például a Safari és a Chrome szövegmezőként jelennek meg – ugyanúgy, mint a type="text" –, így a felhasználók nem veszik észre a különbséget (amíg nem nézik meg a forráskódot).

Aztán ott van az iPhone.

Az iPhone-nak nincs fizikai billentyűzete. Minden "gépelés" a képernyőn megjelenő billentyűzet megérintésével történik, amely a megfelelő időben megjelenik, például amikor egy űrlapmezőre navigál egy weboldalon. Az Apple valami trükkös dolgot csinált az iPhone böngészőjében. Felismer néhány új HTML5-mezőt, és dinamikusan módosítja a képernyőn megjelenő billentyűzetet a bevitel optimalizálása érdekében.

Például egy e-mail cím szöveg, nem? Persze, de ez egy különleges fajta szöveg. Például szinte minden e-mail címben szerepel a @ szimbólum és legalább egy pont (.), de nem valószínű, hogy szóközt tartalmaznak. Tehát amikor iPhone-t használ, és egy elemhez navigál , kap egy képernyő-billentyűzetet, amely a normálnál kevesebb helyet tartalmaz, valamint dedikált karakterbillentyűket. és @.

Hadd foglaljam össze. Nincs hátránya annak, ha azonnal konvertálja az összes e-mail cím mezőjét type="email" formátumra. Gyakorlatilag senki sem fogja észrevenni, kivéve az iPhone felhasználókat, akik valószínűleg szintén nem. De aki észreveszi, az lágyan mosolyog, és megköszöni, hogy egy kicsit megkönnyíti a dolgukat.

Webcímek

A webcím – amelyet a szabványos nerdek URL-nek neveztek, néhány pedáns kivételével, akik URI-nek hívtak – egy másik típusú speciális szöveg. A webcímek szintaxisát a vonatkozó internetes szabvány korlátozza. Ha valaki megkéri Önt, hogy adjon meg egy internetes címet egy űrlapon, akkor valami olyasmit vár, mint a „http://www.google.com/”, nem pedig a „Farwood Road 125”. Gyakoriak a perjelek – még a Google kezdőlapján is van három. Az időszakok is gyakoriak, de a szóközök tilosak. És minden webcímhez tartozik egy domain utótag, például „.com” vagy „.org”.

És hát... (dobpergetés kérem)... . Az iPhone-on ez így néz ki.

Az iPhone megváltoztatta a virtuális billentyűzetét, mint az e-mail-címeknél, de most webcím beírására optimalizálta. A helyet teljesen felváltotta három virtuális kulcs: perjel, pont és „.com” (lenyomva tarthatja a „.com” billentyűt egy másik utótag kiválasztásához, például „.org” vagy „.net”).

Azok a böngészők, amelyek nem támogatják a HTML5-öt, úgy kezelik a type="url"-t, mintha type="text" lenne, így nincs hátránya, ha ezt a típust használja minden olyan mezőben, ahol meg kell adnia egy webcímet.

Számok, mint számlálók

Következő lépés: számok. A szám kérése bonyolultabb, mint egy e-mail vagy webcím kérése. Először is, a számok bonyolultabbak, mint gondolnád. Gyorsan válasszon ki egy számot. -egy? Nem, 1 és 10,7 ½ közötti számra gondoltam? Nem, nem, egy töredékét sem, ostoba. π? Most csak egy irracionális számot választottál.

Szeretném felhívni a figyelmet arra, hogy nem gyakran kérdezik tőled, hogy „csak egy szám”. Valószínűbb, hogy egy bizonyos tartományba eső számot fognak kérni. Lehet, hogy csak bizonyos típusú számokat szeretne ebben a tartományban – esetleg egész számokat, de nem törteket vagy tizedesjegyeket, vagy valami egzotikusabbat, például a 10 többszörösét. A HTML5 mindezt lefedi.

Válasszon egy számot, szinte bármelyiket

min="0"
max = "10"
lépés = "2"
value="6">

Nézzünk meg egy tulajdonságot.

  • type="number" azt jelenti, hogy ez egy numerikus mező.
  • min="0" adja meg a mező legkisebb megengedett értékét.
  • max="10" a legnagyobb megengedett érték.
  • step="2" a minimális értékkel kombinálva érvényes számokat határoz meg a következő tartományban: 0, 2, 4 és így tovább, a maximális értékig.
  • value="6" alapértelmezett érték. Ha ismerősnek tűnik, mindig ugyanazt az attribútumot használják az űrlapmezők értékeinek meghatározására. Itt kiindulópontként említem meg, hogy a HTML5 a HTML korábbi verzióira épít. Nem kell újratanulnod ahhoz, hogy azt csináld, amit korábban csináltál.

Ez a numerikus mező kódja. Ne feledje, hogy ezek az attribútumok nem kötelezőek. Ha van minimum, de nem maximum, megadhatja a min attribútumot, de a max attribútumot nem. Az alapértelmezett lépésérték 1, és elhagyhatja a step attribútumot, amíg más lépésértékre nincs szükség. Ha nincs alapértelmezett érték, akkor a value attribútum lehet üres karakterlánc, vagy akár teljesen elhagyható.

A HTML5 azonban nem áll meg itt. Ugyanazért az alacsony, alacsony szabadságért kapja ezeket a JavaScript kényelmi módszereket.

  • Az input.stepUp(n) n-el növeli a mező értékét.
  • input.stepDown(n) n-el csökkenti a mező értékét.
  • Az input.valueAsNumber az aktuális értéket floatként adja vissza (az input.value tulajdonság mindig egy karakterlánc).

Megjelenítési problémák? Nos, a böngészőkben a számok manipulálására szolgáló megfelelő felület másképpen van megvalósítva. Az iPhone-on, ahol nehéz a gépelés, a böngésző ismét a számok bevitelére optimalizálja a virtuális billentyűzetet.

Az Opera asztali verziójában a type="number" mező számlálóként jelenik meg kis fel és le nyilakkal, amelyekre kattintva módosíthatja az értékeket.

Az opera tiszteletben tartja a min , max és step attribútumokat, így mindig ésszerű számértéket kap. Ha az értéket a maximumra növeli, a felfelé mutató nyíl a számlálóban szürkévé válik.

Mint minden más beviteli mezőt, amelyet ebben a fejezetben tárgyaltam, a type="number"-t nem támogató böngészők type="text"-ként kezelik. Az alapértelmezett érték jelenik meg a mezőben (ahogyan az érték attribútumban van tárolva), de a többi attribútum, például a min és a max figyelmen kívül marad. Ön szabadon implementálhatja ezeket, vagy használhat olyan JavaScript-keretrendszert, amely már megvalósítja a számlálókezelést. Először nézze meg, hogyan.

if(!.bemeneti típusok.szám)(
// nincs natív támogatás a mezőtípus=számhoz
// megpróbálhatja a Dojo-t vagy egy másik JavaScript-keretrendszert
}

Csúszka számok

A számláló nem az egyetlen módja a számok bevitelének. Valószínűleg Ön is látott már ehhez hasonló csúszkát.

Mostantól egy csúszka is lehet az űrlapon. A kód furcsán hasonlít egy számlálómezőhöz.

min="0"
max = "10"
lépés = "2"
value="6">

Az összes elérhető attribútum megegyezik a type="number" - min , max , step , value - attribútumokkal, és ugyanazt jelenti. Az egyetlen különbség a felhasználói felületben van. A beviteli mező helyett a böngészőknek a type="range" csúszkaként kell megjelenniük. A cikk írásakor a Safari, a Chrome és az Opera legújabb verziói működnek ezzel. Sajnos az iPhone egyszerű szövegmezőként jelenít meg, még a képernyőn megjelenő billentyűzetét sem optimalizálja számok beírására. Minden más böngésző egyszerűen type="text"-ként kezeli a mezőt, így nincs ok arra, hogy azonnal elkezdje használni ezt a típust.

A HTML 4 nem tartalmazza a naptáron keresztüli dátumválasztót. A JavaScript keretrendszerek lehetővé teszik ennek megkerülését (Dojo , jQuery UI , YUI , Closure Library), de természetesen ezen megoldások mindegyike megköveteli a keretrendszer "beágyazását" bármely beágyazott naptárhoz.

A HTML5 végül meghatározza a beépített dátumválasztó engedélyezésének módját szkriptek nélkül. Valójában hat van belőlük: dátum, hónap, hét, idő, dátum + idő és dátum + idő időzónával.

Egyelőre a támogatás... kevés.

Dátumválasztó támogatás
Típusú Opera Más böngészők
type="dátum" 9.0+ -
type="hónap" 9.0+ -
type="hét" 9.0+ -
type="time" 9.0+ -
type="datetime" 9.0+ -
type="datetime local" 9.0+ -

Így jelenik meg az Opera :

Ha időre van szüksége a dátum mellett, az Opera is támogatja :

Ha egy hónapra plusz egy évre van szüksége (pl. hitelkártya lejárati dátuma), az Opera megjelenítheti :

Kevésbé gyakori, de elérhető, az év hetének választása via :

Végül, de nem utolsósorban az időzítés :

Dátumválasztó alternatívával




...

Valószínűleg más böngészők is támogatni fogják ezeket a típusokat. A type="email"-hez és más típusokhoz hasonlóan ezek az űrlapmezők is egyszerű szövegként jelennek meg azokban a böngészőkben, amelyek nem ismerik fel a type="date"-t és annak változatait. Ha akarod, csak használhatod mint boldoggá tenni az Opera felhasználókat, és megvárni, amíg a többi böngésző utoléri. Reálisabb a használata , de ellenőrizze, hogy a böngésző rendelkezik-e beépített dátumválasztó támogatással, és tartalmaz-e egy tetszőleges alternatív szkriptes megoldást (Dojo , jQuery UI , YUI , Closure Library vagy más lehetőségek).

Keresőablak

Szóval keress. Nem csak a Google-ról vagy a Yahoo-ról végzett keresések (na azok is). Gondoljon bármely keresőmezőre, bármely oldalon, bármely webhelyen. Az Amazonnak van keresőmezője, a Yandexnek van keresőmezője, a legtöbb blognak is van. Hogyan készülnek? , mint bármely más szövegmező az interneten. Javítsuk ki.

Keress egy új generációt




Egyes böngészőkben nem észlel különbséget a normál szövegmezőkhöz képest. De ha a Safarit Mac OS X rendszeren használja, akkor ez így fog kinézni.

Találtál különbséget? A beviteli mezőnek lekerekített sarkai vannak! Tudom, tudom, nehezen tudod visszatartani az érzéseidet. De várj, ez még nem minden! Amikor elkezd gépelni a type="search" mezőbe, a Safari beszúr egy kis "x" gombot az ablak jobb oldalára. Az "x" gombra kattintva törli a mező tartalmát. Ugyanígy viselkedik a Google Chrome, amelynek a motorháztetője alatt ugyanaz a technológia található. Mindkét kis trükk az iTunes és más Mac OS X ügyfélalkalmazások natív kereséséhez hasonlóan néz ki és viselkedik.

Az Apple.com használja keresni a webhelyén, hogy segítsen a webhelynek „szeretetteljes” érzést közvetíteni. De itt nincs semmi Mac-specifikus. Ez csak egy kód, így bármely platformon minden böngésző kiválaszthatja a megjelenítés módját a platform konvencióinak megfelelően. Az összes többi új típushoz hasonlóan a type="search"-t nem ismerő böngészők type="text"-ként kezelik, így semmi okunk arra, hogy ne kezdje el használni a type="search" kifejezést az összes keresőmezőben még ma.

Markup professzor azt mondja

Alapértelmezés szerint a Safari nem vonatkozik rá a legtöbb stílus. Ha arra szeretné kényszeríteni a Safarit, hogy a keresőmezőt normál szövegmezőként kezelje (saját stílusok alkalmazása érdekében), adja hozzá ezt a szabályt a stíluslaphoz.

bemenet(
-webkit-appearance:textfield;
}

Köszönöm John Lane-nek, hogy megtanított erre a trükkre.

Színválasztás

A HTML5 egy mezőt is meghatároz , amely lehetővé teszi a szín kiválasztását, és hexadecimális jelöléssel adja vissza. Egyik böngésző sem támogatja a színválasztást, ami kár, mert mindig is szerettem a Mac OS palettákat. Talán egy nap.

Jegyzet. fordító. Az Opera 11 támogatja ezt a funkciót.

Űrlap érvényesítése

Ebben a fejezetben az új űrlapelemekről és az olyan új funkciókról beszéltem, mint az autofókusz, de nem említettem a HTML5-űrlapok talán legizgalmasabb részét: az automatikus beviteli ellenőrzést. Nézzük meg az e-mail-cím űrlapon történő megadásának gyakori problémáit. Valószínűleg van kliensoldali érvényesítésed JavaScript-en keresztül, amelyet szerveroldali érvényesítés követ PHP-n, Python-on vagy más szerveroldali nyelven. A HTML5 soha nem fogja felváltani a szerveroldali érvényesítést, de egy nap felválthatja az ügyféloldali érvényesítést.

Két nagy probléma van a JavaScript e-mail cím ellenőrzésével:

  1. Néhány látogatója (valószínűleg körülbelül 10%) nem rendelkezik engedélyezve a JavaScript használatával.
  2. Helytelen címet fog kapni.

Komolyan mondom, rossz címet fog kapni. Hihetetlenül nehéz meghatározni, hogy egy véletlenszerű karakterkészlet érvényes e-mail cím-e. Minél jobban nézel, annál nehezebb lesz. Mondtam már, hogy nagyon-nagyon nehéz? Nem egyszerűbb ezt a fejfájást a böngészőjére akasztani?

Az Opera ellenőrzi a type="email"

Itt van egy képernyőkép az Opera 11-ből, bár ez a funkció az Opera 9 óta létezik. A kód tartalmazza a type attribútum e-mailre való beállítását. Amikor egy Opera-felhasználó megpróbál beküldeni egy űrlapot a , a böngésző akkor is automatikusan ellenőrzi az e-mail címet, ha a szkriptek le vannak tiltva.

A HTML5 webcím-ellenőrzést is kínál mezővel és számok -val . A számérvényesítés tiszteletben tartja a min és max attribútumértékeket, így a böngészők nem engedik be az űrlapot, ha túl nagy számot ad meg.

A HTML5-ben nincs kód az űrlapellenőrzés engedélyezésére, ez alapértelmezés szerint megtörténik. Az érvényesítés letiltásához használja a novalidate attribútumot.

Ne tesztelj




A böngészők lassan engedélyezik az űrlapellenőrzés támogatását a HTML5-ben. A Firefox 4 teljes támogatást fog kapni. Sajnos a Safari és a Chrome csak részben valósítja meg: érvényesíti az űrlapelemeket, de nem jelenít meg semmilyen látható üzenetet, ha az űrlapmezők ellenőrzése sikertelen. Más szóval, ha érvénytelen (vagy hibásan írt) dátumot ad meg a type="date" mezőben, a Safari és a Chrome nem küldi el az űrlapot, de nem árulja el, hogy miért nem. Olyan mezőre állítják a fókuszt, amely érvénytelen értéket tartalmaz, de nem jelenítenek meg hibaüzenetet, mint például az Opera vagy a Firefox 4.

Szükséges Mezők

Támogatás
AZAZ Firefox szafari Króm Opera iPhone Android
- 4.0+ - - 9.0+ - -

Az űrlapellenőrzés a HTML5-ben nem korlátozódik az egyes mezők típusára. Azt is megadhatja, hogy bizonyos mezők kitöltése kötelező. Az űrlap elküldése előtt az ilyen mezőknek értékkel kell rendelkezniük.

A kötelező mezők kódja a lehető legegyszerűbb.




A böngészők módosíthatják a kötelező mezők alapértelmezett megjelenését. Íme egy példa arra, hogyan néz ki a Mozilla Firefox 4.0.

Ezenkívül, ha egy űrlapot egy kötelező érték kitöltése nélkül próbál elküldeni, a Firefox megjelenít egy információs sávot, amely szerint a mező kitöltése kötelező, és nem lehet üresen hagyni.

Tegyük fel, hogy adatokat kell szereznünk az oldalról, amelyek kézi gyűjtése a mennyiség miatt nem praktikus vagy lehetetlen. Ilyen esetben az alábbiakban ismertetett eszközökkel automatizálhatjuk a folyamatot.

kéri a könyvtárat

Python könyvtár kérések küldéséhez a szerverhez és válaszok feldolgozásához. Az elemző szkript alapja és fő fegyverünk. Ezt a könyvtárat használva az oldal tartalmát html formátumban kapjuk meg a további elemzéshez.

import kérések válasz = kérések. get ("https://ya.ru" ) # get-request print (válasz . szöveg ) # oldaltartalom nyomtatása payload = ( "kulcs1" : "érték1" , "kulcs2" : "érték2" ) válasz = kérések . get("http://http://httpbin.org/get" , params = hasznos teher ) # kérés paraméterekkel headers = ( "user-agent" : "my-app/0.0.1" ) válasz = kérések . get(url , headers = fejlécek ) # kérés meghatározott html fejlécekkel

API

Alkalmazásprogramozási felület – a webalkalmazás tulajdonosa által más fejlesztők számára biztosított alkalmazásprogramozási felület. Az igényeinket kielégítő API hiánya az első dolog, amit meg kell győződnünk, mielőtt nekivágnánk az oldal forráskódjának elemzésének és értelmező írásának. Sok népszerű webhely saját API-val és dokumentációval rendelkezik, amely elmagyarázza, hogyan kell használni. Az api-t így is használhatjuk - a dokumentációnak megfelelően http kérést képezünk, és kérések segítségével kapunk választ.

BS4

A Beautifulsoup4 egy könyvtár a html és xml dokumentumok elemzéséhez. Lehetővé teszi, hogy közvetlenül hozzáférjen a html címkék tartalmához.

from bs4 import BeautifulSoup soup = BeautifulSoup (raw_html , "html.parser" ) print (leves . find ("p" , class_ = "some-class" ) . text ) # nyomtatja ki a "p" címke tartalmát a "some-class" osztály szerint

Szelén WebDriver

Az oldalon található adatok dinamikusan generálhatók javascript segítségével. Ebben az esetben a requests + bs4 nem tudja elemezni ezeket az adatokat. A helyzet az, hogy a bs4 js végrehajtása nélkül elemzi az oldal forráskódját. A js-kód végrehajtásához és a böngészőben láthatóval azonos oldal eléréséhez használhat szelén web-illesztőprogramot - ez egy illesztőprogram készlet különféle böngészőkhöz, könyvtárakkal ellátva az illesztőprogramokkal való együttműködéshez.

És mi van, ha van engedély?

session = kérések.Session() data = ("bejelentkezési_felhasználónév":"bejelentkezés", "bejelentkezési_jelszó":"jelszó") url = "http://site.com/login.php" válasz = session.post(url, adatok =adatok)

De mi van akkor, ha az oldal sok kérés miatt tilt?

  • Állítsa be a késleltetést a kérések között:

válasz = requests.get(url, timeout=(10, 0.01)) # kapcsolat időtúllépése, olvasási időtúllépés (másodpercben)

  • Tegye magát böngészőnek szelén web-illesztőprogram használatával, vagy adja át a felhasználói ügynök fejléc tartalmát, és kérjen:

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

  • Proxy használata:

Az osztály példányának lekéréséhez használja a wa()->getResponse() metódushívást, például:

Wa()->getResponse()->getHeader("Tartalomtípus")

Mód

közéleti funkció CSS hozzáadása ($url, $app_id = false)

Hozzáad egy URL-t a CSS-fájlok listájához. Az összes hozzáadott CSS-fájl URL-je lekérhető a Smarty sablonban a ($wa->css()) metódussal.

Lehetőségek

  • $url

    A CSS-fájl relatív URL-címe. Ha a $app_id paraméter értéke meg van adva, akkor a fájl URL-jét a megfelelő alkalmazás fájljait tartalmazó könyvtár URL-címéhez viszonyítva kell megadni. Ellenkező esetben a relatív URL-nek relatívnak kell lennie a keretrendszer telepítési könyvtárához.

  • $app_id

    Alkalmazásazonosító.

Példa

wa()->getResponse()->addCss("css/myapp.css", "myapp");

közéleti funkció Google Analytics hozzáadása ($str)

Hozzáad egy JavaScript-kódrészletet a Google Analytics számára. A Google Analytics kód (beleértve az ezzel a módszerrel hozzáadott kódot is) a webhely HTML-sablonjában található a ($wa->headJs()) metódussal.

Lehetőségek

  • $str

    JavaScript kód töredéke.

közéleti funkció addHeader ($név, $érték, $csere = igaz)

Hozzáad egy fejlécet, amelyet a szerver a felhasználói kérésre válaszul küld. Az így hozzáadott összes fejléc elküldésre kerül a felhasználónak a .

Lehetőségek

  • $név

    Cím neve.

  • $érték

    Cím értéke.

  • $csere

    Jelző, amely azt jelzi, hogy a megadott fejléc korábban beállított értékét le kell cserélni.

Példa

wa()->getResponse()->addHeader("Tartalomtípus", "Application/json");

közéleti funkció addJs ($url, $app_id = false)

Hozzáad egy URL-t a JavaScript-fájlok listájához. Minden hozzáadott JavaScript URL lekérhető a Smarty sablonban a ($wa->js()) metódussal.

Lehetőségek

  • $url

    A JavaScript-fájl URL-je. Ha a $app_id paraméter értéke meg van adva, akkor a fájl URL-jét a megfelelő alkalmazás fájljait tartalmazó könyvtár URL-címéhez viszonyítva kell megadni. Ellenkező esetben a relatív URL-nek relatívnak kell lennie a keretrendszer telepítési könyvtárához.

  • $app_id

    Alkalmazásazonosító.

Példa

wa()->getResponse()->addJs("js/myapp.js", "myapp");

közéleti funkció getCss ($html = igaz, $szigorú = hamis)

Visszaadja a korábban hozzáadott CSS-fájlhivatkozások listáját.

Lehetőségek

  • $html

    Jelző, amely a HTML-kód visszaküldésének szükségességét jelzi a CSS-fájlok összekapcsolásához. Ha false van megadva, a metódus az ilyen fájlok URL-címeinek tömbjét adja vissza.

  • $szigorú

    Jelölje meg, ha a $html igaz értékre van állítva, XHTML formátumot használ a HTML helyett.

Példa

wa()->getResponse()->getCss();

közéleti funkció getHeader ($név = null)

A válaszfejléc értékét adja vissza.

Lehetőségek

  • $név

    Annak a fejlécnek az azonosítója, amelynek értékét vissza kell adni. Ha nincs megadva, a metódus a fejlécek teljes aktuális tömbjét adja vissza.

Példa

wa()->getResponse()->addHeader("Tartalomtípus", "Application/json"); wa()->getResponse()->getHeader("Tartalomtípus");

Eredmény

alkalmazás/json

közéleti funkció getJs ($html = igaz)

Visszaadja a JavaScript válaszfájl hivatkozásainak listáját.

Lehetőségek

  • $html

    Opcionális jelző, amely azt jelzi, hogy vissza kell adni a HTML-kódot a JavaScript-fájlok összekapcsolásához. Ellenkező esetben a metódus a fájl URL-ek aktuális tömbjét adja vissza.

Példa

wa()->getResponse()->getJs();

közéleti funkció getMeta ($név = null)

A META adatok tartalmát adja vissza: oldal címe ("title"), META címkék kulcsszavak ("kulcsszavak"), leírás ("leírás").

Lehetőségek

  • $név

    Annak a META adatelemnek az azonosítója, amelynek értékét vissza kell adni. Ha nincs megadva, a metódus a META adatok teljes aktuális tömbjét adja vissza.

Példa

wa()->getResponse()->getMeta("kulcsszavak");

közéleti funkció getStatus()

A korábban beállított szerver válaszállapotot adja vissza.

Példa

wa()->getResponse()->setStatus(200); wa()->getResponse()->getStatus();

Eredmény

200

közéleti funkció getTitle()

Az oldal címét (TITLE) adja vissza.

Példa

wa()->getResponse()->setTitle("Saját online áruház"); wa()->getResponse()->getTitle();

Eredmény

Az én webáruházam

közéleti funkció átirányítás ($url, $code = null)

Átirányítja a felhasználót a megadott URL-re.

Lehetőségek

  • $url

    Az az URL, amelyre a felhasználót át kell irányítani.

  • $kód

    Az átirányítást kísérő szerver válaszkód.

Példa

wa()->getResponse()->redirect("http://otherdomain.ru/", 301);

közéleti funkció fejlécek küldése()

Elküldi a korábban beállított fejléceket.

Példa

wa()->getResponse()->addHeader("Tartalomtípus", "Application/json"); wa()->getResponse()->sendHeaders();

közéleti funkció setCookie ($név, $érték, $lejárat = null, $útvonal = null, $domain = "", $biztonságos = false, $http_csak = hamis)

Beállítja a cookie-bejegyzés értékét a setcookie PHP függvény segítségével.

Lehetőségek

  • $név

    Record ID.

  • $érték

    A bejegyzés értéke.

  • $expire

    Lejárati idő.

  • $útvonal

    Az URI "alkönyvtárának" az elérési útja, amelyen belül a bejegyzés értéke érvényes.

  • $domain

    Az a domain név, amelyre a bejegyzés értéke érvényes.

  • $biztonságos

    Jelző, amely azt jelzi, hogy az írás csak akkor érhető el, ha az értéket a HTTPS protokollon keresztül továbbítják.

  • $http_only

    Jelző, amely azt jelzi, hogy a rekord értéke csak a HTTP protokollon keresztül érhető el, és nem érhető el kliens szkriptekkel (JavaScript).

Példa

wa()->getResponse()->setCookie("kód", $kód, idő() + 30 * 86400, null, "", hamis, igaz);

közéleti funkció setMeta ($név, $érték = null)

Beállítja a META adatok értékét. Ez az érték a Smarty sablonokban érhető el a ($wa->meta()) metódussal.

Lehetőségek

  • $név

    META adatelem azonosító: oldal címe ("title"), META címkék kulcsszavai ("kulcsszavak") és leírás ("leírás").

  • $érték

    Az elem értéke.

Példa

wa()->getResponse()->setMeta("kulcsszavak", $kulcsszavak);

közéleti funkció setStatus ($kód)

Beállítja a szerver válasz állapotát.

Lehetőségek

  • $kód

    Állapotkód

Példa

wa()->getResponse()->setStatus(404);

közéleti funkció setTitle ($title)

Beállítja az oldal címét (TITLE). A címtartalom elérhető a Smarty sablonokban a ($wa->title()) metódussal.

Válasz generálása a vezérlőktől

Miután a vezérlő befejezte a kérés feldolgozását, általában választ kell generálnia. Amikor alacsony szintű vezérlőt hozunk létre az IController interfész közvetlen megvalósításával, felelősséget kell vállalnunk a kérésfeldolgozás minden aspektusáért, beleértve a válasz generálását az ügyfélnek.

Például egy HTML-válasz küldéséhez létre kell hoznia és össze kell írnia a HTML-adatokat, majd el kell küldenie azokat az ügyfélnek a Response.Write() metódussal. Hasonlóképpen, ha a felhasználó böngészőjét egy másik URL-re szeretné átirányítani, meg kell hívnia a Response.Redirect() metódust, és át kell adnia neki a szükséges URL-t. Mindkét megközelítést az alábbi kód szemlélteti, amely a BasicController osztály kiterjesztéseit mutatja be, amelyeket egy korábbi cikkben hoztunk létre az IController felület implementációjával:

A System.Web.Mvc használata; a System.Web.Routing használatával; névtér ControllersAndActions.Controllers ( public class BasicController: IController ( public void Execute(RequestContext requestContext)) ( string controller = (string)requestContext.RouteData.Values["controller"]; string action = (karakterlánc)requestContext.RouteDataction.Values "]; if (action.ToLower() == "átirányítás") ( requestContext.HttpContext.Response.Redirect("/Derived/Index"); ) else ( requestContext.HttpContext.Response.Write(string.Format("Controller) : (0), Műveletmód: (1)", vezérlő, művelet)); ) ) ) )

Ugyanez a megközelítés alkalmazható, ha a vezérlő a Controller osztályból öröklődik. Az Execute() metódus requestContext.HttpContext.Response tulajdonságának beolvasásakor visszaadott HttpResponseBase osztály a Controller.Response tulajdonságon keresztül érhető el, amint az a következő példában látható, amely kiterjeszti a DerivedController osztályt, amelyet szintén korábban hoztak létre a Vezérlő osztály:

Rendszer használata; a System.Web használatával; a System.Web.Mvc használatával; névtér ControllersAndActions.Controllers ( publikus osztály DerivedController: Controller ( public ActionResult Index() ( // ... ) public void ProduceOutput() ( if (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index" ); else Response.Write("Vezérlő: származtatott, műveleti módszer: ProduceOutput"); ) ) )

A ProduceOutput() metódus a Server.MachineName tulajdonság értékét használja annak eldöntésére, hogy melyik választ küldje el az ügyfélnek. (A "ProfessorWeb" a fejlesztőgépem neve.)

Bár ez a megközelítés, amely a felhasználó számára választ generál, működik, számos probléma van vele:

    A vezérlőosztályoknak információkat kell tartalmazniuk a HTML- vagy URL-struktúráról, ami megnehezíti az osztályok olvashatóságát és karbantartását.

    Egy olyan vezérlőt, amely közvetlenül a kimenetre generál választ, nehéz tesztelni. Létre kell hoznia a Response objektum mintamegvalósításait, majd fel kell tudnia dolgozni a vezérlő kimenetét annak meghatározásához, hogy mi az. Ez például azt jelentheti, hogy végre kell hajtani a HTML-jelölés kulcsszóelemzését, ami hosszú és fárasztó folyamat.

    Az egyes válaszok apró részleteinek ez a kezelése bonyolult és hibára hajlamos. Egyes programozók szeretik az abszolút vezérlést, amelyet egy alacsony szintű vezérlő felépítése biztosít, de ez általában nagyon gyorsan bonyolulttá válik.

Szerencsére az MVC Framework rendelkezik egy praktikus eszközzel, amely megoldja az összes említett problémát - a cselekvések eredményeit. A következő szakaszok elmagyarázzák a műveleti eredmények fogalmát, és különböző módokat mutatnak be annak felhasználására a vezérlőktől érkező válaszok generálására.

A műveletek eredményei

Az MVC-keretrendszer cselekvési eredményei a szándéknyilatkozatok és a szándékok végrehajtásának elkülönítésére szolgálnak (elnézést a tautológiáért). A fogalom egyszerűnek tűnik, ha egyszer rájöttél, de némi közvetettség miatt időbe telik, amíg megérted.

Ahelyett, hogy közvetlenül a Response objektummal foglalkoznának, a műveleti metódusok egy osztályból származó objektumot adnak vissza ActionResult, amely leírja, hogy mi legyen a vezérlő válasza, például egy nézet megjelenítése vagy átirányítás egy másik URL-re vagy műveleti módszerre. Azonban (ez az indirekt) a válasz nem közvetlenül generálódik. Ehelyett egy ActionResult objektum jön létre, amelyet az MVC-keretrendszer feldolgoz, hogy megkapja az eredményt a műveleti metódus meghívása után.

Az Action Results System egy példa a Command tervezési mintára. Ez a sablon olyan forgatókönyveket jelenít meg, amelyekben elmenti és átadja a végrehajtandó műveleteket leíró objektumokat.

Amikor az MVC-keretrendszer ActionResult objektumot kap egy műveleti metódustól, meghívja ExecuteResult() metódus Az objektum osztályában meghatározott. A művelet eredményeinek megvalósítása ezután a Response objektumon működik, és a szándékának megfelelő kimenetet generál. Ennek bemutatásához hozzunk létre egy Infrastructure mappát, és adjunk hozzá egy CustomRedirectResult.cs nevű új osztályfájlt az alábbi példában látható egyéni ActionResult megvalósítással:

A System.Web.Mvc használata; névtér ControllersAndActions.Infrastructure ( nyilvános osztály CustomRedirectResult: ActionResult ( public string Url ( get; set; ) public override void ExecuteResult(ControllerContext context) ( string fullUrl = UrlHelper.GenerateContentUrl(Url, context.Context.Http);Context.Context.Http (teljesUrl); ) ) )

Ez az osztály a System.Web.Mvc.RedirectResult osztály működésén alapul. A nyílt forráskódú MVC-keretrendszer egyik előnye abban rejlik, hogy képes bárminek a belső működését felfedezni. A CustomRedirectResult osztály sokkal egyszerűbb, mint az MVC megfelelője, de a cikk céljaira elegendő.

A RedirectResult osztály példányának létrehozásakor megadjuk azt az URL-t, amelyre a felhasználót át kell irányítani. Az ExecuteResult() metódus, amelyet az MVC-keretrendszer a műveleti metódus befejezése után hajt végre, megkapja a válasz objektumot a kérésre a keretrendszer által biztosított ControllerContext objektumon keresztül, és meghívja vagy a RedirectPermanent() metódust, vagy a Redirect() metódust (ezt pontosan ez történt az IController alacsony szintű megvalósításán belül a cikk korábbi példájában).

A CustomRedirectResult osztály használatát az alábbi példa szemlélteti, amely bemutatja a származtatott vezérlőn végrehajtott módosításokat:

// ... a ControllersAndActions.Infrastructure használatával; névtér ControllersAndActions.Controllers ( nyilvános osztály DerivedController: Controller ( public ActionResult Index() ( // ... ) public ActionResult ProduceOutput() ( if (Server.MachineName == "MyMachineName") új CustomRedirectResult eredményt ad vissza ( Url = "/Basic Index" ); else ( Response.Write("Vezérlő: Származtatott, Műveletmód: ProduceOutput"); return null; ) ) )

Vegye figyelembe, hogy kénytelenek voltunk megváltoztatni a műveleti metódus eredményét, hogy ActionResultot adjunk vissza. Null értéket adunk vissza, ha nem akarjuk, hogy az MVC-keretrendszer bármit is csináljon, amikor a műveleti metódusunk befejeződött, ami akkor történt, ha a CustomRedirectResult példányt nem adták vissza.

Egységtesztelési vezérlők és műveletek

Az MVC-keretrendszer számos része az egységtesztelés megkönnyítésére szolgál, és ez különösen igaz a műveletekre és a vezérlőkre. Ennek a támogatásnak több oka is van:

    A műveleteket és a vezérlőket a webszerveren kívül is tesztelheti. A kontextusobjektumok az alaposztályaikon (például a HttpRequestBase) keresztül érhetők el, amelyet könnyű utánozni.

    Nem kell elemeznie a HTML-jelölést egy műveleti módszer eredményeinek teszteléséhez. Megvizsgálhatja a visszaküldött ActionResult objektumot, hogy megbizonyosodjon arról, hogy a várt eredményeket kapja.

    Az ügyfélkérések emulációja nem szükséges. Az MVC-keretrendszer-modell-kötési rendszer lehetővé teszi olyan műveleti metódusok írását, amelyek paramétereibe bemenetet kapnak. Egy műveleti módszer teszteléséhez egyszerűen meg kell hívnia közvetlenül, és meg kell adnia a megfelelő paraméterértékeket.

A vezérlőkből származó adatok generálásával foglalkozó jövőbeni cikkek bemutatják, hogyan hozhat létre egységteszteket a különféle műveleti eredményekhez.

Ne felejtse el, hogy az egységteszt csak egy része a képnek. Egy alkalmazás összetett viselkedése akkor fordul elő, ha a műveleti módszereket szekvenciálisan hívják meg. Az egységtesztelés a legjobban kombinálható más tesztelési módszerekkel.

Most, hogy tudja, hogyan működik az egyéni átirányítási művelet eredménye, válthat megfelelőjére, amelyet az MVC keretrendszer biztosít, amely hatékony és a Microsoft által alaposan tesztelt. A származtatott vezérlő szükséges módosítása az alábbiakban látható:

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

A feltételes utasítást eltávolítottuk a műveleti metódusból, ami azt jelenti, hogy miután az alkalmazás elindul, és egy URL-re navigál, mint például a /Derived/ProduceOutput , a böngésző egy olyan URL-re lesz átirányítva, mint például a /Basic/Index. A műveleti metódus kódjának egyszerűsítése érdekében a Controller osztály kényelmi módszereket tartalmaz különféle ActionResult objektumok generálására. Így például ugyanazt a hatást érhetjük el, mint a fenti példában, ha visszaadjuk a Redirect() metódus eredményét:

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

A műveleti eredményrendszerben nincs semmi különösebben bonyolult, de végső soron egyszerűbb, tisztább és konzisztensebb kódot kapunk, amely könnyen olvasható és egységtesztelhető. Például átirányítás esetén egyszerűen ellenőrizheti, hogy a műveleti metódus egy olyan RedirectResult példányt ad-e vissza, amelynek Url tulajdonsága tartalmazza a várt célt.

Az MVC-keretrendszer számos beépített műveleti eredménytípust határoz meg, amelyeket az alábbi táblázat ismertet:

Beépített ActionResult típusok
Típusú Leírás A Controller osztály segítő módszerei
Eredmény megtekintése

Megjeleníti a megadott vagy szabványos nézetsablont

Kilátás()
PartialViewResult

Megjeleníti a megadott vagy szabványos részleges nézetsablont

Részleges nézet()
RedirectToRouteResult

HTTP 301-es vagy 302-es átirányítást ad ki a műveleti metódushoz vagy a megadott útvonalbejegyzéshez, URL-t generálva az útválasztási konfigurációnak megfelelően

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

HTTP 301-es vagy 302-es átirányítást ad ki a megadott URL-re

átirányítás()
RedirectPermanent()
Tartalom Eredmény

Formázatlan szöveges adatokat küld vissza a böngészőnek, opcionálisan beállítva a tartalom típusú fejlécet

tartalom()
FileResult

Bináris adatokat (például fájlt a lemezen vagy bájttömböt a memóriában) közvetlenül a böngészőnek továbbít

Fájl()
JsonResult

Sorosít egy .NET objektumot JSON formátumba, és válaszként elküldi. Az ilyen jellegű válaszok gyakrabban jönnek létre a Web API és az AJAX eszközök használatakor.

json()
JavaScriptResult

JavaScript-forráskódot küld a böngésző által végrehajtandó

JavaScript()
HttpUnauthorizedResult

A HTTP-válasz állapotkódját 401-re állítja (jelentése: "nincs jogosult"), ami azt eredményezi, hogy az aktuális hitelesítési mechanizmus (Űrlap-hitelesítés vagy Windows-hitelesítés) felszólítja a látogatót, hogy jelentkezzen be.

Nem
HttpNotFoundResult

HTTP-hibát ad vissza 404-es kóddal - Nem található (nem található)

HttpNotFound()
HttpStatusCodeResult

A megadott HTTP-kódot adja vissza

Nem
EmptyResult

Semmittevés

Nem

Mindezek a típusok az ActionResult osztályból származnak, és sokuknak praktikus segítő metódusai vannak a Controller osztályban. A következő cikkekben bemutatjuk ezen eredménytípusok használatát.