Ajax İşleme


    × Bunları biliyor muydunuz?
"Libraries/ dizini içine taşınan veya bu dizinde oluşturulan kütüphaneler hiç bir tanımlama gerektirmeden kullanılabilir. "


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()); # 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');
    }
}
6.0.2.0 Güncellemesi

Bu güncelleme sonrası ajax isteklerinin kontrolü için ajax isteği yapılan kontrolcü yönteminin dönüş tür değerinin void belirtilmesi yeterlidir.

<?php namespace Project\Controllers;

use Http;
use Import;

class Home
{
    public function exampleAjaxProcess() : void
    {
        Import::view('Home/myAjaxContent');
    }
}

 

 

# Ü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);
     >})