IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: AJAX: error aj success s odpovedou (odlisnou)

Aktivity
Avatar
Neaktivní uživatel:25.9.2014 20:47

Zdravim, toto je pseudoskript (php) ktory sa vykonava na pozadi:

if (CONDITION) {
echo json_encode(get­Message());
} else {
echo json_encode(ge­tError());
}

ajax sa "spusta" niecim takymto:

$.ajax({
...
}).success(function () {
alert("SUCCESS");
}).error(function (response) {
alert("ERROR" + response);
});

... no ale problem je samozrejme v tom, ze je jedno ci ten php skript vrati true alebo nejakeho JSONa s chybou tak odpoved je vzdy typu success a do tej vetvy error mi to nikdy nepadne... ako to riesite? ja som s JS a jQuery este v plienkach - neviem... keby som dal namiesto echo json_encode(ge­tError()); echo false; tak by to fungovalo az na to, ze ja chcem aby mi to v tej error vetve "poslalo" aj tu chybovu hlasku, aby som ju mohol vypisat...

...som si isty ze funguje nejake riesenie, dakujem :)

Odpovědět
25.9.2014 20:47
Neaktivní uživatelský účet
Avatar
Ori I
Člen
Avatar
Odpovídá na Neaktivní uživatel
Ori I:26.9.2014 1:54

už presne neviek ako ajax pracuje pri tom handlovaní chýb, ale ked pošleš ako odpoveď zo servera zakódovaný false, tak to berie ako success. Vlastne success znamená, že skript na serveri prebehol v poriadku. Ak chceš vyvolať error tak musíš poslať nejakú chybovú hlavičku alebo ako by som to nazval.

niečo takéto:

if ($everything_is_ok)
    {
        header('Content-Type: application/json');
        print json_encode($result);
    }
else
    {
        header('HTTP/1.1 500 Internal Server Booboo');
        header('Content-Type: application/json; charset=UTF-8');
        die(json_encode(array('message' => 'ERROR', 'code' => 1337)));
    }

tiež v ajax requeste by nebolo odveci určiť čo za typ dát ma príjmať. V tomto prípade by to mal byť json.

$.ajax({
 url:'blah',
 type:'post',
 dataType:'json',
})

Snáď ti toto zodpovie tvoju otázku.

 
Nahoru Odpovědět
26.9.2014 1:54
Avatar
Neaktivní uživatel:26.9.2014 7:31

ku podivu, ak je odpoved z php:
echo false;
padne to do .error(function)

avsak ked som skusil
echo json_encode(false)
tak to mi uz padlo do .success(function)

...ale to stale neriesi moju problematiku: ide mi o to ze potrebujem odchytit dva rozne stavy a to nie len preto aby som ich rozpoznal, ale aby som oboma tymi odpovedami vedel poslat nejaky string alebo pole stringov "zabalenych" v jsone...

Nahoru Odpovědět
26.9.2014 7:31
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:26.9.2014 7:49

... no podarilo sa mi to vyriesit takto

.complete(function (response) {
        if ($.isArray($.parseJSON(response.responseText))) {
            alert("err");
        } else {
            alert("ok");
        }
    });

...ale prijmem kazdy (lepsi) napad

Nahoru Odpovědět
26.9.2014 7:49
Neaktivní uživatelský účet
Avatar
mayo505
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
mayo505:26.9.2014 11:04

echo json_encode(false) ti nevráti chybu lebo je to string "false" a ten považuje za normálnu odpoveď

Keď chceš vrátiť chybu, nepouži echo ale die("moja správa") ako píše ori
Čiže php kód by vyzeral tak ako už písal a v error v jquery by si tú správu dostal cez data.responseText

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
26.9.2014 11:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.