Szerver oldali hibák megjelenítése

2012.01.07. 10:06 stack

Ha a szerver oldali hibákat nem kezeljük le külön, akkor nehézkes az Ajax hívások között megtalálni, hogy pontosan hol is vesztettük el az irányítást. IE alatt kifejezetten rémálom.
Nem várt elem: ')' a 4816-os sorban. Ha nem használtad még kellően sokat az ExtJS-t, akkor nem biztos, hogy beugrik ebből, hogy itt bizony JSON parser hiba lépett fel. :) A JSON hiba meg nem azért történt, mert a kliens ne tudná feldolgozni az JSON adatokat, hanem mert az adatok helyett valójában egy hibaüzenet érkezett.

Vegyünk egy egyszerű példát. Két szám hányadosát szeretnénk szerver oldalon kiszámolni. (hosszú gondolkodás után ez volt a legegyszerűbb példa:)

Kliens oldalon:

Ext.Ajax.request({
    url: 'osztas.php',
    params: {
        a: 6,
        b: 2
    },
    success: function (response) {
        var t = Ext.decode(response.responseText);
        Ext.Msg.alert('', t.a + ' / ' + t.b + ' = ' + t.hanyados);
    }
});

Szerver oldalon:

die(json_encode(array(
    'a' => $_REQUEST{'a'},
    'b' => $_REQUEST{'b'},
    'hanyados' => $_REQUEST{'a'} / $_REQUEST{'b'}
)));

Tökéletesen működő példaprogram. :)
Ám, ha a második paraméter helyére nullát írunk, akkor jönnek a problémák...

Először a szerver oldalt egészítsük ki:

A lekezeletlen hibákat kapjuk el. Ezt itt most rendkívül leegyszerűsítem, valóságban érdemes fájlba is naplózni, különbséget tehetünk Ajax és normál hívás között, formázhatunk, további infókat is átadhatunk, egyes hibákat figyelmen kívül hagyhatunk stb.

function error_handler ($errorCode, $errorMsg, $file, $line) {
    $msg = 'ErrorCode: '.$errorCode.'<br />';
    $msg.= 'ErrorMsg: '.$errorMsg.'<br />';
    $msg.= 'File: '.$file.'<br />';
    $msg.= 'Line: '.$line.'<br />';
    header('HTTP/1.1 500 Internal Server Error');
    die($msg);
}
set_error_handler('error_handler');

Egy dolgot emelnék ki csupán, hogy 500-as hibakódot adtunk ki, azaz a szerver visszautasítja a kérést! Ez a kód fusson le a nullával való osztás előtt.

Kliens oldalon is kezeljük le a hibás Ajax hívásokat:

Ext.Ajax.on('requestexception', function (connect, response) {
    if (response.status === 500) {
        Ext.Msg.alert(response.statusText, response.responseText);
    }
});

Várakozásnak megfelelően nem lekezeletlen JS hibát kapunk, hanem egy üzenet ablakban a PHP hibát. :)

Szólj hozzá!

Címkék: ajax server error

A bejegyzés trackback címe:

https://extjs.blog.hu/api/trackback/id/tr403525899

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.

ExtJS blog, mi ez?

Az ExtJS egy JavaScript keretrendszer, melyet a blog írója elfogultan a legjobbnak tart, és ez a blog olyan apróságok gyűjteménye, melyek ExtJS használata közben felmerültek, eszébe jutottak...

Címkék

ajax (4) alignto (1) állás (3) analytics (1) anchorto (1) android (4) animate (2) array (9) auto (1) back button (1) beautifier (1) beforeevent (1) benchmark (1) blur (1) budapest.js (1) button (1) canvas (1) capture (1) case sensitive (1) center (1) change (1) cikkajánló (1) class (2) closure compiler (1) collapse (1) combobox (3) comment (1) console.log (2) contextmenu (2) core (2) count (1) css (15) csv (1) dataview (1) date (4) datefield (3) datepicker (1) debug (1) doksi (1) dragdrop (1) easing (1) eclipse (1) editor (1) element (5) error (5) eval (2) event (1) fejtörő (1) field (2) fieldset (1) filter (1) firefox (4) firefox extension (2) focus (3) fonts (1) fun (1) function (1) google (2) google chrome (1) grayscale (1) grid (4) group contact (1) header (3) height (2) hidden (1) hirek (2) history (1) htaccess (1) html5 (2) htmleditor (2) https (1) icon (3) id (2) ie (2) ie6 (1) ie9 (1) iframe (3) image (2) indexof (1) javascript (1) jquery (2) jslint (2) jsmin (1) json (7) keymap (1) kipróbálom (2) könyvajánló (2) label (1) layout (1) lint (1) log (1) loop (1) magyar (2) mandelbrot (1) mask (1) math (1) maxlength (1) mistake (1) mysql (5) napi szívás (16) nem extjs (12) node (1) nth child (1) number (1) off (5) offline (1) operator (1) override (20) pagesize (1) paging (2) panel (2) php (7) picker (1) plugin (3) pozicionálás (2) preload (1) print (1) propertygrid (1) pseudo (3) readonly (2) record (1) regexp (1) replace (1) resizable (1) rotate (1) round (1) scale (1) sencha touch (2) server (1) shuffle (1) slider (1) sort (3) sortable (1) store (2) string (7) sum (1) tabchange (1) tabpanel (1) tab key (2) tdd (1) template (1) textarea (2) textfield (1) textitem (1) theme (2) throw (1) timer (1) timestamp (1) title (2) toggle (1) toolbar (6) tools (1) total count (1) transparent (1) tree (1) treenode (1) trigger (1) truncate (1) try (1) ucfirst (1) undefined (2) unique (1) unload (1) urlencode (1) utf8 (2) verzió (1) video (1) viewer (1) viewport (2) visible (2) vtype (1) window (2) xtype (1) zindex (2)

Extjs.blog.hu - RSS

Kérdés?