ugrás a tartalomhoz

Saját esemény elkapása js try/catch blokkal.

s_volenszki · 2008. Ápr. 23. (Sze), 20.30
A következő funkciót készítem és szeretném a try/catch blokkot használni, de igazából nem hibaüzit akarok elkapni, hanem egy saját eseményt.

A logikai váz nagyjából ez:

Olyan AJAX-os kérést kell indítanom ahol fontos, hogy kalkuláljak azzal, mi történik ha nem érkezk válasz a szervertől, mindezt időkorláttal és néhány automatikus újrapróbálkozással.

Az elképzelésem az, hogy a Request elüldése után állapotkódra várok amit ugye majd catch, de ha lejár egy meghatározott idő, akkor ki kell nyírnom a pending AJAX kérést (ja ez is egy jó kérdés, hogyan tehetem ezt meg jQuery-vel) és újra indítanom. Ezt mondjuk megteszem x5 majd végleg feladom és jelzem usernek hogy sorry.

Ha lehetséges saját eseményeket figyeltetni catch-el, akkor lenne négy féle (logikailag):

1. AjaxRequestSucces ami akkor következik be ha megérkezik a válasz és ok
2. AjaxRequestError ami akkor következik be ha megérkezik a válasz és gebasz van
3. AjaxRequestTimeout ha kifutottunk az időből
4. TransactionFailed ha már x5 kifutottünk az időből

Ez jelenleg is működik egy stansard AJAX-szal, setTimeout-tal, meg egy próbálkozás számlálóval mi 5 után dob egy hibát.

Minden ötletet, javaslatot, kritikát szívesen fogadok!
 
1

Sikerült megcsinálnom!

s_volenszki · 2008. Ápr. 24. (Cs), 10.21
Igaz, hogy végül nem is használtam a try/catch eljárást de sikerült megcsinálnom azt hiszmem a lehető legjobban. Ugyan is mint kiderült, a jQuery-s $.ajax-nak van timeout paramétere, ami ha bekövetkezik ugyan azzal a hibával tér vissza, mint bármilyen hibával, azaz az error kitétel kezeléssel.
  1. var trying = 0;  
  2. ...  
  3. function mentes(adatok){  
  4.     trying++;//Próbálkozás számláló növelése  
  5.     $.ajax({  
  6.         type: "POST",  
  7.         url: "valami.php",  
  8.         data: "data=" + adatok,  
  9.         dataType: "text",  
  10.         timeout: 5000,//5 másodperc a folyamatra  
  11.         error: function(){  
  12.             if(trying < 5)//Próbálkozás számláló figyelése  
  13.             {  
  14.                 WarnMsg = "Kapcsolódási hiba!<br>Újrapróbálom: 5/" + trying;  
  15.                 alert(WarnMsg);  
  16.                 mentes(adatok);  
  17.             }  
  18.             else  
  19.             {  
  20.                 ErrMsg = 'Hiba a kommunikációs csatornában!';  
  21.                 alert(ErrMsg);  
  22.                 //Feladom  
  23.             }  
  24.         },  
  25.         success: function(data){  
  26.             //Minden Ok!  
  27.         }  
  28.     });  
  29. }  
  30. ...  
Egyébként ebben az esetben el lehetne kapni ezt az errort catch-el ami itt keletkezik?
2

dobj egy kivételt

Szekeres Gergő · 2008. Ápr. 24. (Cs), 12.34
az error: function() { } else ágba rakj egy throw "timeout"; kivételdobást, majd így az egész mentés eljárást egy try blokba rakva el tudod kapni (nem próbáltam, de mennie kell). kis help:

http://www.w3schools.com/js/js_throw.asp