Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 4. 1. 2011, 12:01:09
Až doteď sem si myslel, že skript funguje bez problému, když jsem zjistil, že pokud dojde k selhání, tak už se funkce znova nenačte. Potřeboval bych, aby se ta funkce vykonávala i pokud dojde k chybě v požadavku, prostě se provedl timout a funkce se zavovala znova.
Ukázka zde: http://69.party-akce.cz/ajaxis.php Chyba: http://69.party-akce.cz/chyba.jpg Zdroj. kód: <script> function dotaz15() { $.getJSON('testovaci.php?part='+Math.random(), function(out){ $('#hlavicka_15').text(out.hlavicka); $('#blok_15').html(out.blok); $('#infotext_15').html(out.info); $('#paticka_15').text(out.paticka); if(out.stav == 0) { $('#box_15, #udalost_15').removeClass('err war').addClass('rdy'); } if(out.stav == 1) { $('#box_15, #udalost_15').removeClass('err rdy').addClass('war'); } if(out.stav == 2) { $('#box_15, #udalost_15').removeClass('rdy war').addClass('err'); } if(out.cas == '') {var cas_15 = 30*1000;} else {var cas_15 = out.cas*1000} $('#kolik_15').html('<br />' +cas_15); /* $('#info_15').hover( function () { $('#udalost_15').css({'display' : 'block'}); }, function () { $('#udalost_15').css({'display' : 'none'}); } ); */ $('#info_15').click(function() { $('#udalost_15').css({'display' : 'block'}); }); $('#close_15').click(function() { $('#udalost_15').css({'display' : 'none'}); }); setTimeout(function(){dotaz15();}, cas_15); }); } dotaz15(); </script> |
||
Chamurappi Profil |
#2 · Zasláno: 4. 1. 2011, 13:35:11 · Upravil/a: Chamurappi
Reaguji na Medvídka:
$.getJSON neumožňuje zachytávání chyb, musíš použít $.ajax a nastavit funkci do parametru error .
|
||
Medvídek Profil |
#3 · Zasláno: 6. 1. 2011, 14:57:39
Chamurappi:
Tak jsem to přepsal na ajax: //var cas; $.ajax({ type: "GET", url: "loader.php", data: "promenna=1&promt=3&p="+Math.random(), dataType: "json", success: function(jdata){ $("#loader").html(jdata.promenna); if(jdata.chyba == 0){ $("#loader").css({'background-color' : '#B90000'}); } if(jdata.chyba == 1){ $("#loader").css({'background-color' : 'green'}); } var cas = jdata.cas*1000; }, error: function (xhr, ajaxOptions, thrownError){ if(xhr.status == 404) { $("#loader").html("Soubor nenalezen"); } if(xhr.status == 400) { $("#loader").html("Špatný požadavek"); } if(xhr.status == 403) { $("#loader").html("Přístup zamítnut"); } if(xhr.status == 500) { $("#loader").html("Chyba serveru"); } } }); setTimeout(function(){dotaz();}, 2000); } dotaz(); Ale u této funkce mi zas nejde nacpat ten timoout dovnitř té funkce, aby se ten cas mohl brát z promenna ve vracenych datech. |
||
__construct Profil |
#4 · Zasláno: 6. 1. 2011, 15:25:37
Pokiaľ sa nemýlim tak predtým si to mal napchané v metóde
success - prečo to do nej nedáš teraz?
|
||
Medvídek Profil |
#5 · Zasláno: 6. 1. 2011, 15:44:43 · Upravil/a: Medvídek
__construct:
Hodil jsem to tam, ale potřeboval bych aby se ta funkce vykonávala i při chybě, čili ještě při chybě nastavit taky timout s časem, kterej bude pevně daný? Teď si akorát nejsem jistej, jak dlouho sse čeká na odpověď skriptu. Co když budu mít v php skritp se sleepem, třeba sleep(50). To ajax bude čekat na odpověď tak dlouho, dokavad jí nedostane? |
||
__construct Profil |
#6 · Zasláno: 6. 1. 2011, 16:01:56 · Upravil/a: __construct
Medvídek:
Aha .. pozri si callback funkciu complete - tá sa vykoná či už pri úspechu, alebo zlyhaní. Čas pre request si môžeš nastaviť myslím cez timeout
|
||
Medvídek Profil |
#7 · Zasláno: 6. 1. 2011, 16:11:48 · Upravil/a: Medvídek
__construct:
Jestli to dobře chápu: ajax -> loader.php (Zde se třeba bude čekat na konfiguraci, která se může provádět i 15s, teprve poté odešle výsledek, ve výsledku bude i čas refreshe (json.cas) ) 1) situace Vše je v pořádku, zavolá se funkce settimeout s casem z json.cas a skript se provádí znova (třeba po 20s) 2) situace Skript se provádí třeba 40s a stále se čeká na odpověď. Jak teď zajistit, aby se třeba po 30s, pokud neodpoví zase zavolal settimeout a opět zavolal skript. Jde mi o situaci, abych nečekal 3 minuty na to, až odpoví skript. Prostě ho po daném časem, pokud neodpoví odstřelil a spustil znova. To si musim při každym cyklu definovat třeba proměnou sekundy a porovnávat jak dlouho se už ten požadavek zpracovává? Tak sem ho překopal do této podoby: function dotaz(){ var cas = 30000; $.ajax({ type: "GET", url: "loader.php", data: "promenna=1&promt=3&p="+Math.random(), dataType: "json", success: function(jdata){ $("#loader").html(jdata.promenna); if(jdata.chyba == 0){ $("#loader").css({'background-color' : '#B90000'}); } if(jdata.chyba == 1){ $("#loader").css({'background-color' : 'green'}); } cas = jdata.cas*1000; setTimeout(function(){dotaz();}, cas); }, error: function (xhr, ajaxOptions, thrownError){ if(xhr.status == 404) { $("#loader").html("Soubor nenalezen"); } if(xhr.status == 400) { $("#loader").html("Špatný požadavek"); } if(xhr.status == 403) { $("#loader").html("Přístup zamítnut"); } if(xhr.status == 500) { $("#loader").html("Chyba serveru"); } setTimeout(function(){dotaz();}, cas); } }); } dotaz(); nyní by měl pracovat s 30sekundama, pokud nedostane dřív odpověď a nepřepíše se proměnná, je to tak správně? Edit: Tak není to správně, stejně se čeká na odpověď :( |
||
Časová prodleva: 13 let
|
0