Termen limită de interogare

Dezavantajul obiectului XMLHttpRequest este lipsa capacității de a limita timpul de așteptare pentru executarea cererii. Acest dezavantaj este deosebit de important pentru cererile sincrone. Dacă se pierde conexiunea la server, browserul Web va fi blocat în metoda send () și nu va răspunde la acțiunile utilizatorului. În cazul solicitărilor asincrone, acest lucru nu se întâmplă, deoarece metoda send () nu este blocată, iar browserul web poate continua să răspundă la acțiunile utilizatorului. Cu toate acestea, din nou, există o problemă de limitare a duratei de execuție a interogării. Să presupunem că o aplicație care utilizează un obiect Quest XMLHttpRe_ a lansat un HTTP_query atunci când utilizatorul a dat clic pe buton. Pentru a împiedica posibilitatea de a trimite mai multe solicitări, este util să faceți butonul inactiv până la sosirea răspunsului la server. Dar dacă serverul se oprește sau se întâmplă ceva care interferează cu obținerea unui răspuns la cerere? Browserul nu va fi blocat, dar capabilitățile aplicației datorate butonului inactiv vor fi limitate.







Pentru a evita problemele de acest fel, ar fi convenabil să vă puteți seta propriile ore de așteptare utilizând funcția Windows.setTimeout () atunci când executați HTTP_queries. În situația normală, răspunsul apare înaintea numelui de procesare a evenimentului cu temporizator, caz în care puteți apela funcția Window.clearTimeout () pentru a anula operația temporizatorului. Pe de altă parte, dacă manipulatorul de evenimente de la cronometru este sunat mai devreme,

508 Capitolul 20. Lucrul cu protocolul HTTP

decât proprietatea readyState primește valoarea 4, executarea interogării poate fi modificată utilizând metoda XMLHttpRequest.abort (). După aceea, ar trebui să spuneți utilizatorului că încercarea de a executa solicitarea a eșuat (de exemplu, utilizând metoda Window.alert ()). Dacă, în acest exemplu ipotetic, butonul a fost dezactivat prin rularea interogării, puteți să-l reactivați după expirarea perioadei de expirare.







Exemplul 20.7 definește funcția HTTP.get (), care demonstrează organizația de eliminare care tocmai a fost descrisă. Este o versiune de usover_ shenstvovannuyu HTTP.getText funcția () în exemplul 20.2 și sprijină multe dintre caracteristicile demonstrate în exemplele anterioare, eroarea de ceai vklyu_ procesarea parametrilor de cerere și HTTP._getResponse) Metoda opisan_ ny de mai sus (. În plus, vă permite să specificați o funcție de apel invers opțional care va fi numit de fiecare dată când pro_ izoydet onreadystatechange eveniment cu valoarea proprietății readyState, altele decât 4. În browsere precum Firefox, handler eveniment poate vyzyvat_ Xia în mod repetat, cu o valoare de 3, iar această funcție de apel invers permite scriptului să afișeze utilizatorului un indicator al barei de progres.

Exemplul 20.7. Funcția helper HTTP.get ()

* Trimiteți solicitarea HTTP_ la GET cu adresa URL specificată. Dacă reușim

* primind un răspuns, acesta este convertit într-un obiect bazat pe antet

* Content_Type și a trecut la funcția de apel invers specificată.

* Argumente suplimentare pot fi transmise ca proprietăți ale obiectului de opțiuni.

* Dacă primiți un răspuns cu un mesaj de eroare (de exemplu, un mesaj

* 404 nu a fost găsit), codul de stare și mesajul sunt transmise funcției

* options.errorHandler. Dacă instrumentul de eroare nu este definit, se numește

* funcția callback cu o valoare nulă în argument.

* Dacă este definit obiectul options.parameters, proprietățile sale sunt interpretate

* ca nume și valori ale parametrilor de interogare. Utilizarea HTTP.encodeFormData ()

* acestea sunt convertite într-un șir care poate fi inserat în URL, după care acesta

* șirul este atașat la sfârșitul adresei URL după caracterul "?".

* Dacă funcția options.progressHandler este definită, aceasta va fi apelată

* ori de câte ori proprietatea readyState dobândește o valoare nouă, mai mică de 4.

* De fiecare dată când această funcție este transferată, numărul de apeluri către această funcție.

* Dacă specificați valoarea options.timeout, operația obiectului XMLHttpRequest va fi

* întrerupt dacă cererea nu este executată înainte de expirarea numărului specificat de milisecunde.

* Dacă limita de expirare a expirat și funcția este definită

* options.timeoutHandler, va fi apelat cu un șir

* Cerere URL ca argument.

HTTP.get = funcție (url, callback, opțiuni)

var n = 0; var timer;







Trimiteți-le prietenilor: