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.

var trying = 0;
...
function mentes(adatok){
    trying++;//Próbálkozás számláló növelése
    $.ajax({
        type: "POST",
        url: "valami.php",
        data: "data=" + adatok,
        dataType: "text",
        timeout: 5000,//5 másodperc a folyamatra
        error: function(){
            if(trying < 5)//Próbálkozás számláló figyelése
            {
                WarnMsg = "Kapcsolódási hiba!<br>Újrapróbálom: 5/" + trying;
                alert(WarnMsg);
                mentes(adatok);
            }
            else
            {
                ErrMsg = 'Hiba a kommunikációs csatornában!';
                alert(ErrMsg);
                //Feladom
            }
        },
        success: function(data){
            //Minden Ok!
        }
    });
}
...
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