Ajax İşleme


    × Bunları biliyor muydunuz?
"Başlangıç kontrolcüsü tanımlayarak bu kontrolcüde yer alan kodların diğer tüm kontrolcüler için geçerli olmasını sağlayabilirsiniz."


ZN Framework'te istek yapılan URL'ler bir kontrolcü yöntemini çalıştırdığı için Ajax isteği sonucu çalıştırılacak kodlar da kontrolcü yöntemine yazılmalıdır. Aşağıda Jquery ile örnek ajax kullanımı gösterilmiştir.

 

 

# Bölüm Başlıkları


# Görünümün Hazırlanması
# Kontrolcünün Hazırlanması
# Üst Çıktının Engellenmesi
# Ajax Sınıfı (ZN >= 5.9.0)

 

 

# Görünümün Hazırlanması


Aşağıda ajax kodunun yer aldığı örnek görünüm sayfası içeriğine yer verilmiştir.

Dosya: Views/Home/exampleAjaxProcess.wizard.php
<script>
$.ajax
({
    url     : "{{URL::site('Home/exampleAjaxProcess')}}",
    type    : "post",
    data    : {"name":"Ajax Process", "value":"Example Data"},
    dataType: "json",
    success : function(data)
    {
        alert(data.name);
        alert(data.value);
    }
});
</script>

Yukarıda wizard sayfası kullanıldığı için php etiketleri yerine küme parantezleri kullanılmıştır.

 

 

# Kontrolcünün Hazırlanması


Aşağıda örnek amaçlı gösterilen ajax isteğinin yapıldığı kontrolcü yönteminin içeriğine yer verilmiştir.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

use Http, Post;

class Home
{
    public function exampleAjaxProcess()
    {
        Http::isAjax() or exit;

        # Your codes...

        echo json_encode(Post::all()); exit; # Return Values
    }
}

Eğer bir ajax içeriğiniz PHP kodlarından daha çok HTML kodları içerecekse içeriğin bir görünüme oluşturulup kontrolcü yöntemi içerisine Import:: kütüphanesi ile dahil edilebilir.

<?php namespace Project\Controllers;

use Http, Post, Import;

class Home
{
    public function exampleAjaxProcess()
    {
        Http::isAjax() or exit;

        Import::view('Home/myAjaxContent'); exit;
    }
}

 

 

# Üst Çıktının Engellenmesi


Başlangıç kontrolcüsünde herhangi bir çıktıya neden olacak kullanımda bulunursanız aşağıdaki dosyada yer alan ajaxCodeContinue değerini false ayarlayın. Özellikle Masterpage:: kullanımı üst çıktıya neden olacağından ajax sonuçlarınızda bu çıktıyı görebilirsiniz.

Dosya: Config/Starting.php

 

 

# Ajax Sınıfı (ZN >= 5.9.0


Jquery'nin ajax söz dizimini ZN'nin Ajax:: kütüphanesi ile yapabilmeniz de mümkündür. Ajax:: sınıfı Jquery'nin tüm yöntemlerini kullanabilir. Aşağıda jquery parametrelerinin PHP karşılıklarının listesi verilmiştir.

JQuery PHP
PlainObject {'example':'data'} Array ['example' => 'Data']
Function function(p1, p2){ ...codes } Callable ({< ..codes >}, 'p1, p2')
Bool true Bool true
Numeric 5 Numeric 5
String post String 'post'
Kullanımlar
<script>
@Ajax::url('Home/test')
     ->type('post')
     ->data({< $('#form').serialize() >})
     ->success
     ({<
        alert(data);
     >})
     ->done({< alert(5); >})
</script>
Script Etiketleri

Script etiketlerinin Ajax:: sınıfı tarafından açılmasını isterseniz aşağıdaki gibi kullanın.

@Ajax::tag(true)
     ->url('Home/test')
     ->type('post')
     ->dataType('json')
     ->data(['example' => 'Example Data'])
     ->success
     ({<
        alert(data);
     >})
     ->done({< alert(5); >})
Wizard Kullanımı

Ajax:: kütüphanesinin aynı zamanda wizard karşılığıda mevcuttur.

Ajax::url(String $uri) @ajax(String $uri)
@ajax('Home/test')->tag(true)
     ->data(['example' => 'Example Data'])
     ->success
     ({<
        alert(data);
     >})