JQuery Ajax Error Handling / Hataları Toplamak

Jquery Ajax kullandığımız birçok projenin backend tarafında oluşan hataları AJAX tarafında genellikle yakalamak oldukça zordur. Hele birde dataType’ınız JSON gibi farklı formatlar da ise zorluk dereceniz bir tık daha artacaktır.

Fakat her AJAX işleminde success, error işlemlerini yakalamak oldukça zahmetli bir iş. Ekstra fazladan kodlar, bulunamayan satırlar bunlar hep dert.

Aşağıdaki kod parçacağımız sayesinde sistemimizdeki AJAX işlemlerine ekstra olarak error event vermek yerine tüm sisteminizdeki error eventları tek bir yerde topluyoruz ve isterseniz de tekrar başka bir yöntem veya yine AJAX ile herhangi bir yere LOG olarak yazabilirsiniz.

AJAX Error Handling

$( document ).ajaxError( function( event, jqxhr, settings, thrownError )
{
console.log( jqxhr.responseText.trim() );
});

 

Ben kısaca özetleyip, kullanımını belirttim. Console.log ile ekranda görünmesini sağladım.  Gerisi sizde. 🙂 Bu hareketi gördükten sonra bir çok hatayı hızlıca çözmeye başladım / başladık.

PHP Ufak Tefek Fonksiyonlar – 2

PHP üzerinde ufak tefek fonksiyonlarımdan paylaşmaya devam ediyorum. Bir önceki yazıma buradan ulaşabilirsiniz.

Bootstrap gibi HTML / CSS frameworkleri kullanıyorsanız veya kullanmıyorsanız da uyarı ( alert ) sistemlerini kullanıyorsunuzdur.  Bootstrap üzerinden örnek vermek gerekirse ALERT için ufak bir fonksiyon ile hızlıca uyarı sistemlerinizi geliştirebilirsiniz. Ek olarak bütün uyarılarınız tek bir fonksiyon üzerinden çıkacağı için durumu yani status değeri “danger” olanları başka bir yerde loglamak gibi basit bir örnek verebilirim.

function alert( $message, $status = '', $close = false, $back_link = false )
{
$x = ( $close ) ? '<button type="button" class="close" data-dismiss="alert">×</button>' : null ;
$y = ( $back_link ) ? '<a href="javascript:history.back()" class="btn btn-'.$status.'"><i class="fa fa-back"></i>Geri Dön</a>' : null ;
$html = '<div class="alert alert-'.$status.'">
'.$x.' '. $message .' '.$y.'
</div>';
return $html;
}
    • $message değişkeni
      • Gösterilecek olan mesaj
    • $status değişkeni
      • Bootstrap kullanıyorsanız .alert .alert-info gibi değerleri sadece info, danger, warning, success gibi değerler alır
    • $close değişkeni
      • Alert nesnesine kapatma butonu ekler
    • $back_link değişkeni
      • Alert nesnesine Geri Dön butonu ekler

 

Rastgele şifre oluşturma fonksiyonu;

function random_password( $length = 7 )
{
$chars = 'qwertyuiopasdfghjklzxcvbnm0123456789';
$new = '';
for( $i = 0; $i < $length; $i++ )
$new .= $chars[ rand( 0, strlen( $chars ) ) ];
return $new;
}

$length değişkeni sayesinde istenilen uzunlukta rastgele şifreler oluşturabilirsiniz. Bu tarz fonksiyonlar daha çok şifre hatırlat, sms ile onay kodu gibi sistemlerde hızlıca bir şifre üretmek amaçlı kullanılabilir.

 

PHP Ufak Tefek Fonksiyonlar – 1

Hangi yazılım diliyle yazılım geliştirirseniz geliştirin mutlaka kıyıda köşede birikmiş ufak tefek fonksiyonlarınız vardır. Bunları da alıp hemen hemen her projenizin kıyısına köşesine yerleştirip projenizi yönlendirmeye devam edersiniz. Bu işlem hızlıdır, güvenilirdir ve en önemlisi sadıktır. Çünkü yazılan koddan eminsinizdir. Kim bilir kaç yerde kullandınız da arkanıza dönüp bakmadınız. 🙂

Bende bu şekilde kullanmış olduğum fonksiyonlardan örnekler paylaşacağım. PHP ile geliştirmekte olduğumuz sistemlerimizden dolayı örnekler PHP üzerinden olacaktır. Diğer dillerden de örnekler vermeye çalışacağım zamanla.

String bir değişken içerisinde arama;

function in_string( $string, $val )
{
if ( !( strrpos( $string, $val ) === false ) )
return true;
return false;
}

Yukarıdaki fonksiyon strrpos aklıma gelmediği için yazılmıştır. Başka bir amacı yok diyebilirim 🙂 Okumaya devam et “PHP Ufak Tefek Fonksiyonlar – 1”

JQuery ile Nesnenin Show / Hide Event Yakalama

Javascript tarafında oldukça fazla event ( olay ) var. JQuery ile birleştiğinde daha da fazla eventlara hatta özelleştirilmişlere dahi sahip olabiliyorsunuz. Bir projede form hazırlarken div nesnesinin show / hide durumuna göre başka bir nesnenin işlenmesi gerekiyordu. Ufak bir araştırma sonucu herhangi bir nesnenin – sadece div değil – show / hide durumlarına göre event atayabileceğimi buldum.

Aşağıdaki kod ile bu event ın tanımlamasını yapıyoruz

( function( $ )
{
  $.each(['show', 'hide'], function (i, ev)
  {
var el = $.fn[ ev ];
$.fn[ ev ] = function()
{
  this.trigger( ev );
  return el.apply( this, arguments );
};
  });
})(jQuery);

Örnek kullanım;

$( 'div' ).on( 'show', function()
{
$( 'span' ).html( 'div gösterim durumu açık' );
});
$( 'div' ).on( 'hide', function()
{
$( 'span' ).html( 'div gösterim durumu kapalı' );
});

Siz div veya kendi class / id her neyse artık $( ‘div’ ).show(); veya $( ‘div’ ).hide(); yaptığınızda span nesnesi içerisinde durumunu açıklayan yazıyı yazacak. Bu ihtiyaç bizim için sekmeli form işlemi yaparken verilen cevaplara göre bir sonraki sorunun ( her bir soru bir div içerisinde yapı olarak yer alıyor )  hangisi olacağını belirliyordu. Basit bir işlem için bu şekilde bir kullanıma gerek kalmayabilir fakat hareket güzel. 🙂

Denemedim fakat event ataması yapılırken each ile birlikte show / hide belirteci yapılırken farklı eventlar üzerinden event türetimi yapılabilir sanırım.

Kaç Satır Kod Yazdığınızı Merak Ediyorsanız ?

Projelerinizde kaç satır kod yazdığınızı merak ediyorsanız ki ben etmiştim onun aşağıdaki ufak projeyi yazdım ( Kopyala + Yapıştır > Sonuç : ). Google üzerindeki araştırmalar sonucu bir klasör içerisindeki dosyaların Boyutlarını, Satır sayılarını, Karakter ve Kelime sayılarını basit bir şekilde ekrana döktüm.

 

Siz isterseniz birden fazla klasör seçimi de yapabilirsiniz. Proje örnek kodları ve projenin kaynak kodları aşağıda yer almaktadır. Proje C#.NET tabanlıdır. Neden diye sormayın en hızlı bununla çıkartabildim 🙂 Daha farklı yöntemler olabilir. Linç etmeyin 🙂

Form üzerinden seçilen klasörün içerisindeki dosyaları tek tek okuyup dosya yolu ile  birlikte datagrid nesnesine ekliyor.

            if (!Directory.Exists(@"" + textBox1.Text))
                return;
            dataGridView1.Rows.Clear();

            DirectoryInfo di = new DirectoryInfo(@""+textBox1.Text);
            FileInfo[] directories = null;
            try
            {
                // tüm klasörler içerisindeki hangi dosyaların hesaplanacağı -- hepsi seçildi.
                directories = di.GetFiles("*", SearchOption.AllDirectories); 
            }
            catch
            {

            }
            Int64 total = 0;
            foreach (var item in directories)
            {
                string FilePath = @"" + item.DirectoryName + "\\" + item.Name;
                var lineCount = File.ReadLines(FilePath).Count(); // satır sayısı
                Int64 WordsCount = 0; // kelime sayısı
                Int64 CharCount = 0; // karakter sayısı
                
                // dosyayı parçalara ayırıp kaç satır ve karakter olduğunu hesaplayacağız.
                string FileText = new System.IO.StreamReader(FilePath).ReadToEnd().Replace("\r\n", "\r");
                CharCount = FileText.Length;
                WordsCount = FileText.Split(' ').Length;
                // datagrid üzerine topladığımız bilgileri aktarıyoruz. BoyutHesapla fonksiyonu ile dosya boyutu hesaplanıyor ( b, kb, mb, gb vs )
                dataGridView1.Rows.Add(item.Name, item.DirectoryName.ToString().Replace(textBox1.Text, ""), BoyutHesapla( item.Length ), item.Length, lineCount, CharCount, WordsCount);
                total += item.Length;
            }
            label2.Text = ( dataGridView1.Rows.Count - 1 ).ToString();
            label4.Text = BoyutHesapla( total)+" ( "+total+" ) "; // toplam boyutu hesaplaıyoruz..

Yukarıdaki kodda yer alan BoyutHesapla fonksiyonu ise gelen boyutları byte, kilobyte, megabyte vb. cinsinden çevrilmesini sağllıyor.

        public static string BoyutHesapla(long gelenboyut)
        {
            if (gelenboyut >= 1073741824)
                return (gelenboyut / 1073741824) + " GB ";
            if (gelenboyut >= 1048576)
                return (gelenboyut / 1048576) + " MB ";
            if (gelenboyut >= 1024)
                return (gelenboyut / 1024) + " KB ";
            return gelenboyut + " B ";
        }

Proje Dosyalarını Buradan İndirebilirsiniz..

Mikrotik C# API Get Parse

Ufak bir proje için Mikrotik Firewall cihazlarından bilgileri çekmek için wiki.mikrotik.com tarafından hazır sınıfı ( Class ) kullanıyoruz.

Bu işlemleri hızlandırmak adına ufak bir Dictionary geri döndüren parse fonksiyonu hazırladık. Dışarıdan gönderilen MK class ı ile mik nesnesini otomatik olarak okuyup parçaladıktan sonra veriyi geriye dizi olarak döndürüyoruz. Bu diziyi örnekleyecek olursak bir tablo gibi geriye dönüyor. Satırlardan oluşuyor. Sütunlar için ise KEY -> VALUE şeklinde yapılanma mevcuttur.

public static Dictionary<int, Dictionary<string, string>> get_parse(MK mik)
{
Dictionary<int, Dictionary<string, string>> temp = new Dictionary<int, Dictionary<string, string>>();
int i = 0;
foreach (var item in mik.Read())
{
Dictionary<string, string> asd = new Dictionary<string, string>();
string[] tmp = item.Split('=');
for (int k = 0; k < tmp.Length; k += 2)
asd.Add(tmp[k], tmp[k + 1]);
temp[i] = asd;
i++;
}
temp.Remove(i - 1);
return temp;
}

Jquery DataTable Dropdown Problemi

Projelerinizde Jquery DataTable kullanıyorsanız ve datatable içerisinde de dropdown menüler kullanıyorsanız problemler yaşayabilirsiniz.
Problem; mobil olarak web sayfanızı açtığınızda dropdown menülerin açık ve kapatılamaz olmasıdır.
Aşağıdaki kod satıları ile bu problemin üstesinden geldik fakat mantık hatasından dolayı çift tıklayıp ( iki kere ekrana bastıktan sonra ) etkileşime geçmektedir. Düzeltip kullanabilirsiniz .

<script type="text/javascript">
$( document ).ready( function()
{
if ( $(window).width() <= 768 )
{
var open_drop_menu = '<style id="wi_style_id">@media (max-width: 768px) { .dropdown-menu,.table.dataTable>tbody>tr.child ul.dropdown-menu{display: none !important;} }</style>';

$( 'head' ).append( open_drop_menu );

setTimeout( function()
{
$( document ).delegate( '.dropdown-toggle', 'click', function()
{
if( $( 'style#wi_style_id' ).length > 0 )
$( 'style#wi_style_id' ).remove();
else
$( 'head' ).append( open_drop_menu );
} );

}, 2557 );
}
});
</script>

PHP ile Dizi İçerisinde Tüm String İfadeleri Büyük Çevirmek

Merhabalar,

PHP ile dizileri genellikle kullanıyorum. Özellikle de esnek olarak kullanılabilmesi birçok olanağı bize sunmaktadır.
Katı kurallar olmadan sonsuz elemanlı diziler oluşturabiliyoruz diyebiliriz.

Bir projede ihtiyaç olan dizi içerisindeki tüm string ifadelerin Türkçe karakter destekli olarak büyük harfe çevirme işlemi için ufak bir fonksiyon yazdım.
Beni kurtardı. Başkalarını da kurtarsın 🙂

function upper_string_arr( $arr )
{
foreach( $arr as $key => $value )
{
if( !is_array( $value ) )
{
$arr[ $key ] = mb_strtoupper( $value );
continue;
}
foreach( $value as $k => $v )
{
if( !$v || is_numeric( $v ) )
continue;
if( is_array( $v ) )
upper_string_arr( $v );
$arr[ $key ][ $k ] = mb_strtoupper( $v );
}
}
return $arr;
}

Fonksiyon recursive olarak ilerlemekte. İç içe olan dizileride büyültmektedir.