inicio mail me! sindicaci;ón

parseInt Kullanımına Dikkat

Projelerimizin birinde JSON olarak aldığımız verilerden bir kısmını işlerken javascript’in parseInt methodundan yararlanıyorduk. "gün/ay/yıl" formatında gelen bir tarih stringini (örn: 08/12/2011) parçalarına ayırıp bir takım işlemlere tabi tutuyorduk.

Ancak burada parseInt("08")' ve parseInt("09")‘un 0 değerini döndürdüğünü farkettik. Kısa bir araştırma sonucu parseInt’in 8′lik tabanda çalıştığını öğrendik. Artık bu fonksiyonu kullanırken parseInt(deger,taban) şeklinde kullanıyor olacağım.


parseInt('01'); //eşittir 1
parseInt('02'); //eşittir 2
parseInt('03'); //eşittir 3
parseInt('04'); //eşittir 4
parseInt('05'); //eşittir 5
parseInt('06'); //eşittir 6
parseInt('07'); //eşittir 7
parseInt('08'); //eşittir 0
parseInt('09'); //eşittir 0

İlgili Html Elementinin Dışına Tıklanma Olayını Yakalama

Genellikle açılır menülerde sıkça rastlanılan bir senaryo diyebiliriz. Bir elemente tıklanır ya da fare ile üzerine gelinir ve daha sonra bunun kendisi dışında sayfada herhangi bir yere tıklanılması durumunda kapatılması istenir. Bu elbette birçok şekilde yapılabilir. Stackoverflow‘da rastladığım aşağıdaki yöntem bence gayet güzel bir çözüm olmuş. Siz de varsa eğer kendi çözümlerinizi paylaşabilirsiniz.


var isMouseInside = false;

$(function()
{
    $('.ilgiliElement').hover(function(){
        isMouseInside = true;
    }, function(){
        isMouseInside = false;
    });

    $("body").mouseup(function(){
        if(!isMouseInside)
          $('.ilgiliElement').hide();
    });
});

Jquery Ajax ile Herhangi Bir ASP.NET WebService’ini Tüketmek

Jquery’nin $.ajax fonksiyonu ile, oluşturmuş olduğum bir webservice’i kullanmanın kısaca yolunu aktarıp, öğrendiğim ipuçlarını paylaşacağım. Senaryomuz kısaca iki sayfadan oluşacak. Bunlardan biri sırasıyla varsayılan adlarıyla WebForm1.aspx web sayfası, diğeri ise WebService1.asmx web service olacaktır.

WebForm’da form içerisinde kullanıcı adı alan bir textbox ve bir button olmak üzere service’e json request’de bulunan bir ajax çağrımı gerçekleştireceğiz. Service ise bu kullanıcı adına “Merhaba”+KullanıcıAdı ekleyerek bize yine json formatında cevap gönderecek.

WebForm içerisindeki ajax çağrımını gerçekleştiren javascript:


        function docheck() {

            var username = $('#username').val();

            $.ajax({
                type: "POST",
                url: "WebService1.asmx/HelloWorld",
                data: "{'Name':'" + username + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (val) {
                    alert(val.d);
                },
                error: function (val) {
                    alert("Hata");
                }

            });
        }

Şimdi de WebService dosyamızı oluşturalım:

    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string HelloWorld(string Name)
        {
            return "Merhaba "+ Name;
        }
    }

Böylece artık ajax requestler ile tüketebileceğimiz bir servis methodu yaratmış olduk. Peki bu senaryoyu gerçekleştirirken neler öğrendim:

  • JSON gönderip almak için servis class’ının üstüne [System.Web.Script.Services.ScriptService] isimli attribute’ün eklenmesinin gereklilik olduğunu. Aynı şekilde XML transferi için böyle birşey gerekmediğini
  • ASP.NET 3.5 ile gelen bir özellik olan, JSON objesinin “d” objesi ile sarmalandığını, bu sebeple servisten dönen cevap basit tipler(string, int, bool) dahi olsa senaryomuzdaki gibi val.d diyerek değerlere ulaşmamız gerektiğini. Bu uygulamanın temel sebebinin XSS saldıralarından korunmak olduğunu, zira object içerisine herhangi bir anlamlı javascript ifadesi yazdığımızda eğer request get ise bunun yorumlanabileceğini

Yararlandığım kaynaklar:

Bir sonraki yazımda attribute kullanımından bahsederek, reflection’a giriş yapayacağım.

İyi çalışmalar,

Sayfadaki Bir Elemana Scroll Yapmak

Uzun soluklu tempolu çalışmalar sebebiyle son zamanlarda biraz yorgun düştüğümü itiraf etmeliyim. Öğrendiklerimi paylaşmaya çok vakit bulamıyor olsam da, kısaca yazabileceklerimi paylaşmaya çalışacağım. Bunlardan biri de sayfadaki herhangi bir elemana scroll işlemi gerçekleştirmek olacak.

Projemizdeki senaryoda submit edilen form içerisinde, validasyondan geçemeyen ilk elamanın yanında bir validasyon tooltipi gösteriyoruz. (Bu alan boş bırakılamaz, E-posta adresi geçersiz vb.) Uzun formlarda validasyon mesajı mevcut browser pencere içerisinde sayfada görünemeyebiliyordu. Bu sebeple eğer ilgili tooltip sayfada görünmüyorsa o elemana doğru pürüzsüz bir kaydırma işlemi gerçekleştirdim. Bunu yaparken de jquery’in animation methodundan ve window’un scrollTop property’sinden yararlandım.

Basitçe syntax


	$("html, body").animate({ scrollTop: $("Scroll-Edilecek-Element").offset().top }, "slow");

Kullanımına örnek vermek adına, sayfanın en altında sabit bağlantılar olduğunu ve bunların belli bloklara işaret ettiğini varsayalım. Mevcut bağlantılara tıklanıldığın sahip oldukları class’lar gözönünde bulundurularak ilgili bloklara scroll işlemi gerçekleştirelim.

Örnek uygulama için buraya tıklayınız…

Biraz Regex

Bir projede ihtiyaç doğrultusunda regexlerde değişiklik yapmamız gerekiyordu. Ben de daha önce regex’le ilgilenmiştim ancak itiraf etmeliyim ki bu süreçte çok kullanmadığım için çabucak unutmuşum. Kısaca yeniden bir gözden geçirdim ve yeni öğrendiğim bir tekniği paylaşmak istedim.

Proje aşağıdaki gibi urllere sahip, fontunu kalınlaştırdığım kısım ise bizim regex ile elde etmemiz gereken kısım.

http://localhost/index.php/page,Testing.EditProfile/PageId,trabhsw32sadsaxe32sadas1

İki parçada sorunu şu şekilde çözdüm. Sizin de farklı bir çözümüz varsa paylaşabilirsiniz.

(?<=\.)([a-zA-Z]+){4}

1) İlk kısımda noktaya kadar olan kısmı urlden çıkarmasını istedim. Bu şekilde http://localhost/index. kısmından url’i arındırmış olduk.

2) Amacımız slash’ın hemen öncesindeki eşleşen kelimeyi almak aslında. Bu durumunda php kısmından da bir şekilde kurtulmamız gerekiyor. Php 3 karakter içerdiğinden ve aynı zamanda sayfa isimlerin de asgari 4 karakter olduğu senaryomuzda 2. kısım için a’dan z’ye büyük ve küçük harf duyarlı olmak üzere en az 4 karakter zorunluluğu koydum. Bu şekilde istediğim kısmı, projedeki tüm url çeşitlerinde elde etmiş oldum.

Bu örneği uygularken öğrendiğim en önemli nokta ise benim için yazdığım regex’in ilk kısmıydı. Bu kullanım şeklinin diğer versiyonlarını kendime de bir hatırlatma olsun diye ayrıca buraya not alıyorum.

1) (?=ABC)
Positive lookahead. Matches a group after your main expression without including it in the result.

2) (?!ABC)
Negative lookahead. Specifies a group that can not match after your main expression (ie. if it matches, the result is discarded).

3) (?<=ABC)
Positive lookbehind. Matches a group before your main expression without including it in the result.

4) (?<!ABC)
Negative lookbehind. Specifies a group that can not match before your main expression (ie. if it matches, the result is discarded).

İyi çalışmalar,

Test için yararlandığım siteye buradan ulaşabilirsiniz.

 

« Previous entries · Önceki Yazılarım