Avatar
Neaktivní uživatel:

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
Člen
Avatar
Odpovídá na Neaktivní uživatel
Ori:

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  +1 26.9.2014 1:54
Avatar
Neaktivní uživatel:

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:

... 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
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
mayo505:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 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.