Web servis kullandığım neredeyse bütün projelerde kullandığım bir javascript fonksiyonu, kullanımı oldukça kolaylaştıran bir yapıdır. Bir çoğunuzun işine yarayacağına eminim.
PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
<script type="text/javascript"> /** * * parameters_object için tanımlı değişkenler * * custom_success_function: Servis başarıyla cevap döndürdüğünde çağırılacak varsayılan fonksiyonun dışında bir fonksiyon adı * custom_error_function: Servis başarıyla cevap döndürmediğinde çağırılacak varsayılan fonksiyonun dışında bir fonksiyon adı * * Kullanımı * * var parameters_object = { user_id: 1, receiver_user_id: 2, conversation_id: 3 }; * call_web_service('get_messages', parameters_object, 'GET'); * * param action: Web servisin adı * param parameters_object: Web service gönderilecek parametrelerin bulunduğu obje * param ajax_type: GET veya POST, default olarak GET * param base_url: Eğer default servisin yolundan farklı bir servise gönderecekseniz bu parametreyide gönderebilirsiniz. * returns {boolean} * */ function call_web_service(action,parameters_object,ajax_type,base_url){
// Bazı kontroller için ajax çağırımının başladığını belirtiyoruz ajax_running = true;
if(action.length>1){
// Eğer web servis ismi varsa herşey yolunda demektir
}else{
ajax_running = false; return false; // Web servis ismi boş olduğu için fonksiyonu burada kesiyoruz
}
var post_data=parameters_object; var parameters_object_length=Object.keys(parameters_object).length;
if (parameters_object_length>0){
// Eğer gönderilen obje boş değilse herşey yolunda demektir
}else{
ajax_running = false; return false; // Hiç bir veri gönderilmediği için fonksiyonu burada kesiyoruz
}
submitted_ajax_type="GET"; // Varsayılan olarak GET ayarlandı, POST işlemini yalnızca şifre eposta veya kredi kartı gibi bilgileri gönderecekseniz kullanmanızı tavsiye ediyorum
// Eğer farklı bir servis yolu girilmişse başına çift slash ekliyoruz base_url="//"+base_url;
}else{ base_url=""; // Girilmemişse boş bırakıyoruz }
// jQuery ajax fonksiyonu yardımıyla web servisimizi çalıştırıyoruz $.ajax({ type: submitted_ajax_type, url: base_url+"/web_services/"+action+"/?", cache: false, data: post_data, success: function(data) {
ajax_running=false;
// Servis başarıyla cevap verdiğinde otomatik olarak bu servise ait bir başarılı fonksiyonu çağırıyoruz // Örneğin servisin adı get_messages ise başarıyla cevap döndüğünde success_get_messages fonksiyonu çağırılıyor // Eğer başarıyla cevap döndüğünde çağırılmasını istediğiniz fonksiyon farklı ise bunu gönderilen parametreler arasına 'custom_success_function' adıyla eklemeniz gerekmektedir if(typeof parameters_object.custom_success_function != 'undefined' && typeof window[parameters_object.custom_success_function] === 'function') { window[parameters_object.custom_success_function](data,parameters_object); } else if (typeof window["success_"+action] === "function"){ window["success_"+action](data,parameters_object); } else{ // Fonksiyon bulunamadı ama her şey yolunda, cevap başarıyla döndü }
}, error: function(data){
ajax_running=false;
// Servis başarıyla cevap vermediğinde otomatik olarak bu servise ait bir hata fonksiyonu çağırıyoruz // Örneğin servisin adı get_messages ise başarıyla cevap dönmediğinde error_get_messages fonksiyonu çağırılıyor // Eğer başarıyla cevap dönmediğinde çağırılmasını istediğiniz fonksiyon farklı ise bunu gönderilen parametreler arasına 'custom_error_function' adıyla eklemeniz gerekmektedir if(typeof parameters_object.custom_error_function != 'undefined' && typeof window[parameters_object.custom_error_function] === 'function') { window[parameters_object.custom_error_function](data,parameters_object); } else if(typeof window["error_"+action] === "function"){ window["error_"+action](data,parameters_object); } else{ // Fonksiyon bulunamadı ve servis başarıyla cevap döndüremedi ! }
} }); }
/** * * Servis başarıyla cevap döndürdüğünde çağırılan varsayılan fonksiyon * * param data: Servisten dönen veriler * param parameters_object: Servise gönderdiğimiz veriler * */ function success_get_messages(data, parameters_object) { console.log(data); }
/** * * Servis başarıyla cevap döndürmediğinde çağırılan varsayılan fonksiyon * * param data: Servisten dönen veriler * param parameters_object: Servise gönderdiğimiz veriler * */ function error_get_messages(data, parameters_object) { console.log(data); } </script>
Teknik açıdan okunabilirlik adına iyileştirmeler yapılabilit.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
ajax_running = true;
if(action.length>1){
// Eğer web servis ismi varsa herşey yolunda demektir
}else{
ajax_running = false;
return false; // Web servis ismi boş olduğu için fonksiyonu burada kesiyoruz
}
daha anlaşılır ve okunabilir hali..
else'e gerek duymadan.. eğer validate değil ise, akışı kes.
if(action.length<1){
return false; // Web servis ismi boş olduğu için fonksiyonu burada kesiyoruz
}
---
ajax_running -> bu değişken ne işe yarıyor pek kesitremedim.
validate olmayan her noktada false atanmış. ws call sonrasındaki fail/sucess durumundada false atanmış.
Kafa karışıklığı dışında herhangi bir katkısı yok anladığım kadarıyla, olmasada olur bu fonksiyon için.
Diğer açıdan, PUT tipini gönderilse fonksiyonu çağıran GET gibi davranacak, bu da bir diğer handikap.