Bu yazımda Ajax işlemlerinde ResponseFormat belirtiminden bahsedeceğim. Bu belirtim Ajax işlemlerinde performans, kullanışlılık, kolay kullanım gibi kriterler için önemli. ResponseFormat belirtimini hem Webforms projeleri için hem de MVC projeleri için nasıl yapabileceğimizi göstermeye çalışacağım. ResponseFormat özelliği Ajax işlemlerinde dönen sonucun hangi türde olduğunu belirtir ve XML veya JSON olabilir. Eğer sonuç JSON tipinde olursa sonuç JSON biçimine dönüştürülerek elde edilir. XML tipinde olur ise de XML yapısına dönüştürülerek elde edilir. Şimdi bu yöntemlerin nasıl kullanılacağını ve ne zaman kullanılacaklarını irdeleyelim.
Burada iki yapının daha iyi anlaşılması için daha önce sitemde paylaştığım User Control render eden ve sonucunu string olarak dönderen metotları kullanacağım. Burada aynı işlemde sonucu hem JSON tipinde hem de XML tipinde elde edeceğiz. Kodlarımız (webmetotlarımız) şöyle.
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public static string MetotXML()
{
return UserControlRender("~/Ajax.ascx");
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string MetotJson()
{
return UserControlRender("~/Ajax.ascx");
}
Görüldüğü gibi ResponseFormat özelliğini bu şekilde belirtiyoruz. Bu belirtimi webmethodlara attribute (özellik) atama biçiminde yapıyoruz ve
ScriptMethod özelliğini ekliyoruz. Bu özellik içinde de ResponseFormat tipini belirtebiliyoruz. (
ScriptMethod özelliği için
System.Web.Script.Services namespace'ni kullanıyoruz. Ayrıca ResponseFormat özelliğini belirtmez isek default olarak JSON atanır.)
Paylaştığım kodlar Ajax işlemlerinde en çok kulanılan yöntemlerden biridir. Belirli bir yapının içeriğini elde etme ve bu içeriği sayfada bir yerlerde gösterme yöntemidir. Burada ResponseFormat tipi olarak kullanmamız daha mantıklı olan tip XML'dir. Çünkü string veri işlemlerinde eğer formatımız XML olursa herhangi bir dönüştürme işlemi olmadan verileri elde edebiliyoruz. Eğer JSON olursa elde edilen sonuç JSON türüne dönüştürülür. Bu dönüştürme işlemi bazen sıkıntı yaratabilir. Eğer dönüştürülecek verinin boyutu çok büyük ise sorun çıkabilir. Bu sorunu yaşamamak için projelerimize JSON dönüştürme işlemi için karakter sınırı belirtebiliriz. Bu belirtimi web.config dosyasında şu şekilde yapabiliyoruz.
// JSON dönüşümü için Web.config dosyasına eklenecek değerler
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="1000000"></jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
String işlemlerinde XML kullanmak daha mantıklı. Çünkü JSON'da olduğu gibi bir dönüşüm yok. Verileri olduğu gibi elde edip kullanabiliyoruz. Aşağıda hazırladığım kodların çalışır halinin Firebug görüntüsü var. Burada nasıl bir dönüşümün yapıldığını görebiliriz.
Eğer Ajax işlemlerinde string veri türü değil de başka veri türleri üzerinden çalışıyor isek bu sefer XML yerine JSON kullanmamız daha mantıklıdır. Çünkü JSON tipi hem oluşturma hem de sorgulama performansı açısından XML tipine göre daha iyidir. Aşağıda yazdığım
Insan nesnesi üzerinden Ajax işlemi gerçekleştiren ve tipi XML ve JSON olan işlemlerin görüntüsünü bulabilirsiniz.
Buradaki gibi kullanımlarda (string olmayan kullanımlarda) mantıklı olan JSON tipidir. Çünkü verinin oluşturulması ve sorgulanması XML tipine göre daha iyidir. Elde edilen verileri sorgulamak için jQuery kütüphanesi yeterli. jQuery ile hem JSON tipindeki verileri hem de XML yapısındaki verileri sorgulayabiliyoruz. Bu konuda daha önce yazmış olduğum yazılar incelenebilir.
Asp.net MVC projelerinde ise bu belirtimi ayrıca yapmaya gerek yok. MVC projelerinde zaten bu türde veri dönderen ActionResult türleri tanımlandığı için hangi tipte veri dönderecek isek o türde bir ActionResult kullanmalıyız. Örneğin JSON tipinde veri dönderecek isek JsonResult, XML türde dönderecek isek ContentResult, PartialViewResult vb. ActionResult türlerini kullanabiliriz.
Her iki sonuç türünü de duruma göre kullanabiliriz. Ancak burada dikkat etmemiz gereken noktalar var. Örneğin jQuery Ajax metodunu kullanıyor isek dikkat edilecek noktalardan biri Ajax isteğinde
dataType özelliğini ResponseFormat özelliğine uygun olacak biçimde belirtmemiz lazım. Eğer ResponseFormat JSON ise dataType
json, XML ise de
html veya
xml olmalıdır.
Ajax işlemlerinde ResponseFormat belirtimini nasıl yapacağımızı ve hangi durumlarda hangisinin tercih edilmesi gerektiğine değinmeye çalıştım. Bundan sonra Ajax işlemlerinde bu özelliklere dikkat etmekte fayda var diye düşünüyorum.
İyi Çalışmalar.