[Tanya] Runtunan pada JavaScript

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

Moderator: irzan2010

[Tanya] Runtunan pada JavaScript

Postby pujanggabageur » 06 Sep 2011, 15:16

Om, Javascript memang tidak mengenal runtunan ya? Misal saya punya kode begini:

Code: Select all
    var intRet = 0;

   $.ajax({
      type:"GET",
      url: "data/dataSave.asp",
      data: dataString,
      dataType: "json",
      success: function(data){
         if (data.status=='1'){
            alert('berhasil');
         }
         intRet = data.status;
      }
   });

    if (intRet == 1){
        //Some code
    }


Kalau di VB proses kan akan berjalan secara beruntun, dimulai dari baris pertama hingga terakhir, sehingga dari kode di atas, hasil akhirnya adalah variabel intRet bernilai 1 kemudian program menjalankan blok "Some code". Nah jika pada javascript, nilai variabel intRet tetap bernilai 0, padahal data.status = 1, sehingaga blok "Some code" tidak terkesekusi.

Kalau yang saya lihat seolah-olah JavaScript 'mengabaikan' runtunan, apa benar demikian? lalu bagaimana cara mengatasinya (supaya bisa beruntun)?
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 » 06 Sep 2011, 15:31

Kalau saya lihat, nilai intRet diberikan SETELAH ajax callback . Artinya setelah satu trip ke server, baru nilai tersebut diisi. Jadi untuk baris

Code: Select all
if (intRet == 1){
        //Some code
    }

harusnya juga dipanggil setelah ajax callback.
Kalo diubah, kode tersebut kira-kira begini:
Code: Select all
  var intRet = 0;
submit_form = function()
{
 

   $.ajax({
      type:"GET",
      url: "data/dataSave.asp",
      data: dataString,
      dataType: "json",
      success: success_datasaveCallback
   });
    return false;
}
success_datasaveCallback = function (data)
{
        if (data.status=='1'){
            alert('berhasil');
         }
         intRet = data.status;
     
    if (intRet == 1){
        //Some code
    }
}
: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 » 06 Sep 2011, 15:39

Oh... Itu berarti karena Javascript 'tidak mau menunggu' proses selesai 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, 15:45

Baru tahu kalau param success di ajax bisa panggil fungsi 'di luar' ajax nya :D
Code: Select all
success: success_datasaveCallback

Nice info om, dicoba dulu :-bd
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, 15:54

Om, saat panggil success_datasaveCallback, parameter-nya nggak disertakan? Gimana kalau success_datasaveCallback punya dua parameter.

Misal:

Code: Select all
saveRowCallback=function(data, strID){
  //bla... bla... bla...
}


bagaimana cara manggil di param success-nya?
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 » 06 Sep 2011, 15:54

Oh... Itu berarti karena Javascript 'tidak mau menunggu' proses selesai ya om?


Bukan begitu oom. AJAX kan kepanjangan dari Asynchronous javascript and xml. Jadi kata kunci proses itu adalah asynchronous. Dengan bahasa lain, proses itu berjalan *diluar* proses yang sedang berlangsung. Beda thread dia. Thread yang pertama tetap berjalan (dari mulai awal fungsi submit_form sampai habis (baris return false)), thread kedua melakukan pekerjaan mengontak server, mengirim data, menerima data dan memanggil fungsi setelah data diterima. Dan kedua thread ini berjalan sendiri-sendiri tidak berurutan (atau runtun istilah oom PB, atau asynchronous istilah kerennya).

definis tentang asynchorous yang agak mudah dimengerti bisa dilihat disini

dalam ilmu pemrograman, operasi asinkronus berarti suatu proses tidak bergantung pada proses lain, berbeda dengan arti operasi sikronus yang dilihat sebagai proses berjalan setelah proses yang satu selesai atau berhenti.

in computer programs, asynchronous operation means that a process operates independently of other processes, whereas synchronous operation means that the process runs only as a result of some other process being completed or handing off operation
: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 vberror13 » 06 Sep 2011, 16:00

pujanggabageur wrote:Om, saat panggil success_datasaveCallback, parameter-nya nggak disertakan? Gimana kalau success_datasaveCallback punya dua parameter.

Misal:

Code: Select all
saveRowCallback=function(data, strID){
  //bla... bla... bla...
}


bagaimana cara manggil di param success-nya?



kayaknya nggak bisa kalau kita memakai ajaxnya jquery. Callback ajax jquery memang sudah seperti itu. Bahkan callback ajax jquery telah punya beberapa parameter tambahan.

Solusinya adalah menambahkan data (strID ?) pada return value callback (yang pada fungsi ini bernama variable data)

jadi struktur data di object data aja yang ditambahkan. Kalau tadinya data berstruktur seperti ini:

Code: Select all
data = { status : 1}

tambahkan lagi strukturnya:
Code: Select all
data = { status : 1,returnID: ID }

Jadi lebih fleksible.
: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 » 06 Sep 2011, 16:03

vberror13 wrote:Solusinya adalah menambahkan data (strID ?) pada return value callback (yang pada fungsi ini bernama variable data)


Hehe iya om (setelah dicoba) memang ngga bisa :D
Solusinya sudah diterapkan... :-bd
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 » 06 Sep 2011, 16:07

pujanggabageur wrote:Baru tahu kalau param success di ajax bisa panggil fungsi 'di luar' ajax nya :D
Code: Select all
success: success_datasaveCallback

Nice info om, dicoba dulu :-bd

:D bisa juga ditambahkan function bila terjadi INTERNAL SERVER ERROR, oom:

Code: Select all
submit_form = function()
{
 

   $.ajax({
      type:"GET",
      url: "data/dataSave.asp",
      data: dataString,
      dataType: "json",
      success: success_datasaveCallback ,
      error: fail_datasaveCallback
   });
    return false;
}
fail_datasaveCallback = function (jqXHR, textStatus, errorThrown)
{
alert( "error: " +  textStatus);
}


Ini untuk handle bila terjadi error di server dan server status response <> HTTP 200 / OK.
:ymbilly: :ymbilly: :ymbilly: =:) :ymbilly:
Just Because You Are Unique, Doesn't Mean You Are Useful
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 vberror13 » 06 Sep 2011, 16:08

Baru liat lagi manual jquery ajax, ternyata bisa juga proses synchronous. :D

tambahkan property async = false untuk proses syncronous:

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;
:ymbilly: :ymbilly: :ymbilly: =:) :ymbilly:
Just Because You Are Unique, Doesn't Mean You Are Useful
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

Next

Return to Javascript and Framework

Who is online

Users browsing this forum: No registered users and 1 guest