function hede()
{
handle = file_open(file);
if (!handle) return false;
...
...
return true;
}
ve programin aki$i icinde
function main()
{
if (!hede()) echo "dosya acamadik..";
..
..
}
Bu $ekilde hata yakalamak, hic yakalamamaktan daha iyi olmakla beraber, ne kadar daha iyi oldugu tarti$ilir bir yakla$imdir.
Daha sonra OOPcularin bunun onune gecmek icin saga sola istisna firlatan kodlari cikti. Bu hata yakalamak icin kullanilan en dogru yakla$im oldu.
Boyle kisa bir onsozden sonra gelelim asil girmek bahsetmek istedigim konuya:
Web'in son zamanlardaki trendi Ajax ile server tarafindan client'a hata gondermek icin kullandigim bir yontemi aciklamak istiyorum:
Ilk ba$ta yanli$/ilkel olan yontemle ba$lamak istiyorum ki bu yontemi kullanmanin getirdigi copluk kodu da daha rahat gorelim:
Servera yapilan bir requestin JSON icinde bir mesaj donmesi seneryosundan yola cikalim.
Pseudo kod ile yazilmis a$agidaki istemci kodu olsun:
file: ajax.js
function RequestList() {
AjaxCall('http://server/getList.php',
onsuccess: function(res) {
checkResponse(eval(res.responseText))
}
);
}
vede $u $ekilde bir server tarafinda asil verileri gonderecek script olsun:
file: getList.php
$sql = "Select * from lists where id=1";
$res = mysql_query($sql);
if (mysql_num_rows($res) == 0) {
echo "{'error':'no results'}";
} else {
$row = mysql_fetch_array($res);
echo "{'id':'$row[id]','item':'$row[itemname]'}";
}
?>
(evet yukardaki kod JSON cevaplari gondermek icin dogru yolun yakinindan bile gecmiyor, ama i$ gorecek basit bir kod.)
Kisaca yukardaki kod parcalarindan php olani, DBde 1 idli bir giri$ yoksa bir JSON arrayi icinde, error ve aciklamasi $ekilinde bir cevap donuyor.
Eger gir$ varsada o giri$ ile ilgili verileri donuyor. $imdi client tarafinda eksik olan
checkResponse()fonksiyonuna bakalim:
file: ajax.js
function checkResponse(res)
{
if (res[0] == "error") alert("hata oldu:"+res[1]);
else ne_gerekiyorsa_onu_yap(res);
}
Yontem acik ve net olarak kendinin ne kadar kotu ve $ikliktan uzak oldugunu gosteriyor. Burada ayrica benim kufur etmeme gerek yok.
$imdi ise cok daha $ik olan, prototype kutuphanesinin sagladigi
on999: tipi callbackler kullanarak yapabilecegimiz biryontemi aciklamak istiyorum:
Buradaki puf nokta, server tarafindaki scriptlerde bi hata olu$tugu zaman, HTTP Header olarak 999 (veya sizin favori rakaminiz kacsa, tabii
varolan HTTP headerlari ile cakmamasi sizin yarariniza olur) gondermek.
Kisaca yukaridaki kodu $u $ekilde modifiye edebiliriz:
file: ajax.js
function RequestList() {
AjaxCall('http://server/getList.php',
onsuccess: function(res) {
ne_gerekiyorsa_onu_yap(eval(res.responseText))
},
on999: function(res) {
generic_error_handler(eval(res))
});
}
Server side:
$sql = "Select * from lists where id=1";
$res = mysql_query($sql);
if (mysql_num_rows($res) == 0) {
header("HTTP/1.0 999 Exception");
echo "no results";
} else {
$row = mysql_fetch_array($res);
echo "{'id':'$row[id]','item':'$row[itemname]'}";
}
?>
Bunun yaninda client tarafinda eksik olan
generic_error_handler() fonksiyonu yazilinca gayet terbiyeli ve yaki$ikli bir hata yakalama mekanizmasi olu$uyor.
Hiç yorum yok:
Yorum Gönder