| 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: 16 let
|
|||
0