Friday, May 28, 2010

jQuery Rebind After Ajax Call

Hampir 2 jam lamanya, gw muter2 di coding
JAVASCRIPT. Bingung kenapa innerHTML yg
di "isi" oleh AJAX yg terdapat sisipan
JAVASCRIPT ga jalan.Nah utk lebih jelas nya
silahkan dicuba code di bawah ini.
Sebelumnya pastikan jQuery sudah
ter-"install" jika belum silahkan download
di sini Download jQuery.
<!-- file: index.html -->
<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
</head>
<body>
<div id="test1">
Mouse over me please
</div>
<div id="data-container">
</div>
</body>
<script type="text/javascript">
$('#test1').mouseover(function(){

alert('test1 triggered');

$.post('data.html',function(data){

$('#data-container').html(data);
});
});
</script>
</html>
<!-- end of: index.html -->

<!-- file: data.html -->
<div id="test2">Request Complete, try mouse over to trigger alert</div>
<script type="text/javascript">
$('#test2').mouseover(function(){

alert('test2 triggered');
});
</script>
<!-- end of: data.html -->
Humm... aneh kan? Fungsi alert seakan2 tidak
tereksekusi. Nah solusi nya di cuba code
di bawah ini.
<!-- file: index.html -->
<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
</head>
<body>
<div id="test1">
Mouse over me please
</div>
<div id="data-container">
</div>
</body>
<script type="text/javascript">
$('#test1').mouseover(function(){

alert('test1 triggered');

$('#data-container').load('data.html',function(data){

// Re-Bind
$('#test2').mouseover(function(){

alert('test2 triggered');
});
});
});
</script>
</html>
<!-- end of: index.html -->

<!-- file: data.html -->
<div id="test2">Request Complete, try mouse over to trigger alert</div>
<!-- end of: data.html -->
Semoga membantu.
Coding for life, coding with ethic.

Sunday, May 16, 2010

jQuery Simple Modal

Sudah pernah dengar jQuery? Kalo belum segera ke TKP!
jQuery: The Write Less, Do More, JavaScript Library
Karena web application akan terasa sperti desktop application.
Belum lagi dukungan utk Ajax yg super simple.
Benar2 buat life so easier...

Nah setelah download tuh jQuery, gw mau bahas neh
tentang modal window. Apa sehh modal window? Kalo yg
pernah megang java pasti tau banget nehh. Modal window
itu adalah dimana user "dipaksa" antar muka
terhadap suatu window saja. Contoh nya, cuba
taruh script ini.
<script>alert("Native modal");</script>

Udah dapet dunk bayangan nya? cuba dehh klik area
lain tapi masih dalam scope browser tsb yahh,
atau parent application nya. Nahh kl udah dapet
gambarannya, skg bagaimana caranya supaya tuh
modal muncul sesuai dg design kita? Kalau
dengan jQuery hanya cukup dg
$("#element-id").modal();

Se-simple itu kah? Lahh judul artikel ini apa?
Simple Modal! hahahahhaha. Ini referensi nya
langsung, komunitasweb.com . Hope you guys enjoy
this article.

Coding for life, coding with ethic.

Sunday, May 2, 2010

Codeigniter Oracle Transaction BUG

Guys, ini baru ketemuin BUG. Khusus nya
utk Driver Database Oracle, OCI8.
Seharus nya transaksi yg di awali
dg trans_start(TRUE) tidak akan ter-COMMIT.
$this->db->trans_start(TRUE);
$this->db->simple_query("insert into test
(id,name)
values
('1','ade1') ");
$this->db->simple_query("insert into test
(id,name)
values
('1','ade2') ");
$this->db->simple_query("insert into test
(id,name)
values
('1','ade3') ");
$this->db->trans_complete();

Expected result:
rollback

Actual result:
rollback

Semua berjalan lancar, transaksi di rollback.
Lohh mana BUG nya? Nahh cuba sisipkan
'SELECT' query di antara nya :D.
Sudah terlihat BUG nya? Query 'INSERT'
sebelum 'SELECT' ter-COMMIT. Di mana seharus nya
tidak boleh!!! Ceritanya begini, misalkan
kita ada transaksi seperti ini:
$this->db->trans_start(TRUE);
$this->db->simple_query("insert into test
(id,name)
values
('1','ade1') ");
$this->db->simple_query("insert into test
(id,name)
values
('1','ade2') ");
$result = $this->db->query("select * from test");
$this->db->simple_query("insert into test
(id,name)
values
('1','ade3') ");
$this->db->trans_complete();

Expected result:
rollback

Actual result:
2 rows inserted

Nah setelah saya telusurin driver nya.
Ternyata BUG nya ada di
/system/database/driver/oci8/oci8_result.php
line : 46 dan 50. Fungsi ociexecute bila hanya terima
1 parameter maka parameter ke 2 nya di set
menjadi OCI_COMMIT_ON_SUCCESS. Kebayangkan?
Jadi seluruh transaksi insert akan ter-COMMIT
walaupun trans_complete belum terpanggil.

Solusi nya cukup rubah line 46 dan 50,
@ociexecute($this->stmt_id);
menjadi
@ociexecute($this->stmt_id, OCI_DEFAULT);

Di execute lagi query di atas yg ada 'SELECT'
query di antaranya dan expected result nya
tercapai.

Coding for life, coding with ethic.