[Tanya] Runtunan pada JavaScript

Forum diskusi mengenai client-side scripting Javascript dan framework-framework yang mendukungnya

Moderator: irzan2010

Re: [Tanya] Runtunan pada JavaScript

Postby ariartama » 06 Sep 2011, 16:28

Izin menyimak om.. Mumet lihatnya.. #:-s
Silahkan yang mau memperpanjang tali silaturahmi :
http://www.facebook.com/ariartama
User avatar
ariartama
Kopral Dua
Kopral Dua
 
Posts: 645
Joined: 06 May 2010, 18:59
Location: Sondari.com
Memberi kopi: 34 cangkir
Mendapat kopi: 60 cangkir

Re: [Tanya] Runtunan pada JavaScript

Postby ekaperintis » 06 Sep 2011, 17:07

ariartama wrote:Izin menyimak om.. Mumet lihatnya.. #:-s


[OOT]

Maaf om pb dan vberror13 ikut nyimak juga, #:-s #:-s , meres otak banget untuk memahaminya ^:)^ ^:)^
Image
User avatar
ekaperintis
Sersan Satu
Sersan Satu
 
Posts: 2086
Joined: 17 Mar 2010, 14:27
Location: Parungpanjang-Bogor
Memberi kopi: 82 cangkir
Mendapat kopi: 152 cangkir

Re: [Tanya] Runtunan pada JavaScript

Postby pujanggabageur » 06 Sep 2011, 17:27

@ om-om di atas, selamat menyimak, ah tidak semumet yang dibayangkan kok :D
Yang begini:
Code: Select all
var bodyContent = $.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: {id : this.getAttribute('id')},
      dataType: "html",
      async:false,
      success: function(msg){
         alert(msg);
      }
   }
).responseText;


Padahal ane sering pake, tapi belum ngerti maksudnya (pengaturan param async) :">
Betul juga, kenapa tidak dicoba cara seperti itu. <:D>

Kalau tidak di assign ke variabel bisa gak ya om?
Wajib hukumnya mematuhi Peraturan Memposting!
Diajar babarengan
User avatar
pujanggabageur
Global Moderator
Global Moderator
 
Posts: 2814
Joined: 13 Mar 2010, 14:15
Location: di depan LCD ViewSonic
Memberi kopi: 159 cangkir
Mendapat kopi: 293 cangkir

Re: [Tanya] Runtunan pada JavaScript

Postby pujanggabageur » 06 Sep 2011, 17:42

Keseluruhan dari pertanyaan saya sebetulnya begini kasusnya om.

Saya punya grid (pakai komponen JQuery flexigrid), di mana disediakan 'kemampuan' untuk menambah dan mengedit baris-baris yang ada. Jadi ketika saya menekan tombol Save (memanggil fungsi saveData), program akan memeriksa tiap-tiap baris pada grid, apakah itu baris baru atau baris yang diedit. Sebelumnya saya sudah memberi pembeda (menambahkan atribut class) pada setiap baris yang diedit maupun baris baru.

Jika baris merupakan baris baru maka panggil fungsi insertData, jika baris merupakan baris yang diedit maka panggil fungsi updateData

Bentuk kasarnya seperti berikut
Code: Select all
// variabel untuk menghitung data yang berhasil disimpan
var = intSaved = 0;

saveData=function(){
   //Pengulangan sebanyak baris pada grid
   $(tr).each(function(){
      if $(this).hasClass("edited"){
         updateData(param1, param2, param3)
      }
      if $(this).hasClass("new"){
         insertData(param1, param2, param3)
      }
   });
   
   if (intSaved > 0){
      alert("Berhasil menyimpan data sebanyak " + intSaved + " baris.");
   }
}

updateData=function(param1, param2, param3){
   var dataString = blablabla;
   $.ajax({
      type:"GET",
      url: "data/dataSave.asp",
      data: dataString,
      dataType: "json",
      success: function(data){
         if (data.status=='1'){
            intSaved += 1;
         }
      }
   });
}

insertData=function(param1, param2, param3){
   var dataString = blablabla;
   $.ajax({
      type:"GET",
      url: "data/dataSave.asp",
      data: dataString,
      dataType: "json",
      success: function(data){
         if (data.status=='1'){
            intSaved += 1;
         }
      }
   });
}


Nah, ternyata, nilai dari variabel intSaved selalu 0 (tidak bertambah).
Wajib hukumnya mematuhi Peraturan Memposting!
Diajar babarengan
User avatar
pujanggabageur
Global Moderator
Global Moderator
 
Posts: 2814
Joined: 13 Mar 2010, 14:15
Location: di depan LCD ViewSonic
Memberi kopi: 159 cangkir
Mendapat kopi: 293 cangkir

Re: [Tanya] Runtunan pada JavaScript

Postby vberror13 » 07 Sep 2011, 09:02

:-? kalo kodenya seperti ini:
Code: Select all
$(tr).each(function(){
      if $(this).hasClass("edited"){
         updateData(param1, param2, param3)
      }
      if $(this).hasClass("new"){
         insertData(param1, param2, param3)
      }
   });

agak susah juga untuk menghitung intSaved dan mengeluarkan alert jumlahnya. Soalnya seingat saya di IE (yang versi 6), untuk eksekusi ajax dalam iterasi seperti di atas, prosesnya setelah satu panggilan selesai, baru dilakuan penggilan ajax berikutnya.
seperti kayak gini:
a. panggilan satu-> post -> response (done)
b. panggilan dua -> post -> response (done).
c. dst.
Untuk FF, eksekusi ajax dalam iterasi akan terjadi hampir secara bersamaan. Jadi panggilan ajax pertama belum selesai, panggilan ajax berikutnya bisa berjalan. kayak gini:
a. panggilan satu -> post
b. panggilan dua -> post
c. panggilan ketiga -> post
d. panggilan satu -> response-> done
e. panggilan dua -> response -> done.

dan bahkan adakalanya panggilan yang belakangan selesai lebih dulu ketimbang panggilan sebelumnya.
Dengan demikian akan susah untuk mencari tau berapa data yang berhasil disimpan dan mengeluarkan alert, karena di FF tadi kita nggak bisa memperikirakan apakah pemanggilan ajax telah selesai semua atau tidak.

Saran saya sih, jangan satu-satu begitu untuk melakukan update/insert data. Kumpulkan saja semua ke dalam json dan kirim datanya sekaligus.


Code: Select all
var objData=new Array();;
var iCounter=0;
$(tr).each(function(){
//kumpulkan datanya
   var isNew = $(this).hasClass("edited") ? "edited":"new";
   var param1 =  $(this).find("td").eq(0).html();//cell 1
   var param2 =  $(this).find("td").eq(1).html();//cell2
   var param3 =  $(this).find("td").eq(2).html();//cell3
   objData[iCounter] ={p1:param1, p2:param2, p3:param3,p4:isNew};
   iCounter++;
   });
/// call ajax save data:
SaveTable (objData);


Dengan demikian response ajaxnya bisa ditambahin jumlah yang benar-benar tersimpan di server. kira-kira begini:
Code: Select all
dataResponse = { dataSaved:30}
atau lebih detail:
dataResponse = {updated:28, new:2}
:ymbilly: :ymbilly: :ymbilly: =:) :ymbilly:
Just Because You Are Unique, Doesn't Mean You Are Useful

Post vberror13 telah mendapat kopi dari:
pujanggabageur
User avatar
vberror13
Global Moderator
Global Moderator
 
Posts: 1846
Joined: 13 Mar 2010, 20:34
Location: Medan Indonesia
Memberi kopi: 296 cangkir
Mendapat kopi: 321 cangkir

Re: [Tanya] Runtunan pada JavaScript

Postby pujanggabageur » 07 Sep 2011, 10:40

Mantap om :-bd
Gak kepikirin datanya dikumpulkan lebih dulu terus dikirimkan sekali :">
Tapi Alhamdulillah sudah berhasil dengan cara begini:
Code: Select all
    // variabel untuk menghitung data yang berhasil disimpan
    var intSaved = 0;
    saveData=function(){
        var sAct = "";
       //Pengulangan sebanyak baris pada grid
       $(tr).each(function(){
          if $(this).hasClass("edited"){
             sAct = "insert";
          }
          if $(this).hasClass("new"){
             sAct = "update";
          }
             //Fungsi simpan data (insert dan update) digabungkan
             //Karena ternyata tidak boleh dipisahkan :D
             insertData(sAct, param1, param2, param3, strID)
       });
       
       if (intSaved > 0){
          alert("Berhasil menyimpan data sebanyak " + intSaved + " baris.");
       }
    }

    insertData=function(strAct, param1, param2, param3, strID){
       var dataString = blablabla;
       $.ajax({
          type:"GET",
          url: "data/dataSave.asp",
          data: dataString,
          dataType: "json",
          //Async diset false
          async: false,
          success: function(data){
             if (data.status == 1){
                intSaved += 1;
                $("#" + strID).removeClass('edited');
             } else if (data.status == 2){
                intSaved += 1;
                $("#" + strID).removeClass('new');
            }
          }
       });
    }



Terima kasih banyak om atas bantuannya. ^:)^
Wajib hukumnya mematuhi Peraturan Memposting!
Diajar babarengan
User avatar
pujanggabageur
Global Moderator
Global Moderator
 
Posts: 2814
Joined: 13 Mar 2010, 14:15
Location: di depan LCD ViewSonic
Memberi kopi: 159 cangkir
Mendapat kopi: 293 cangkir

Previous

Return to Javascript and Framework

Who is online

Users browsing this forum: No registered users and 1 guest