CVE-2025-55182: Celah Keamanan Pada ReactJS

tutorial javascript

Beberapa hari ini, developer khususnya yang menggunakan reactjs dihebohkan oleh penemuan celah security CVE-2025-55182. Celah keamanan ini masuk pada kategori high severity karena dapat menyebabkan kebocoran data serta manupilasi behaviour pada komponen tertentu. Artikel ini akan mencoba membahas bagaimana celah keamanan CVE-2025-55182 dapat mempengaruhi aplikasi berbasis reactJs serta apa langkah mitigasi yang direkomendasikan.

BACA JUGA : https://softgain-technology.com/2020/07/03/menampilkan-map-pada-web-page-iframe-tutorial-google-maps-api/

Apa itu CVE-2025-55182?

CVE-2025-55182 adalah celah keamanan pada react server component. Celah keamanan pada reactjs ini memungkinkan dilakukannya Remote Code Execution (RCE), hal ini menyebabkan penyerang atau hacker untuk mengeksekusi kode dari sisi server tanpa memerlukan autentikasi. Karena dampaknya yang sangat buruk, celah keamanan reactjs ini bahkan sampai mendapatkan nilai maksimal: CVSS 10.0 (High Severity).

Silakan simak video beirkut ini untuk Mendemostrasikan bagaimana celah keamanan CVE-2025-55182 ini: https://www.youtube.com/watch?v=UoxdGVQHqYw

Dampak dari celah keamanan CVE-2025-55182

Langkah mitigasi dan saran

Penutup

CVE-2025-55182 atau React2Shell merupakan celah keamanan pada ReactJS yang berbahaya dan harus segera ditangani. Banyak developer mungkin tidak sadar aplikasi yang mereka kembangkan rentan terhadap celah ini, dikarenakan depedensi RSC ini sering terpasang secara tidak langsung melalui framework atau library lainnya.

Menampilkan Map Pada Web Page, Tutorial Google Maps

tutorial javascript

Menampilkan Map Pada Web – Kali ini kita akan membahas bagaimana cara menampilkan map pada web menggunakan google maps. Untuk dapat menampilkan map pada webite, kita akan bagi menjadi dua cara, yang pertama adalah menggunakan tag iframe (cara ini hanya mampu menampilkan map saja tanpa ada fitur tambahan), cara kedua adalah dengan memanfaatkan API dari google maps itu sendiri (dengan cara ini kita bukan hanya akan menampilkan tapi juga kita akan menambahkan beberapa fitur seperti on click event dan kotak pencarian).

BACA JUGA : https://soft-gain.com/2020/07/02/daftar-library-javascript-terbaik-terpopuler/

Goals – Menampilkan Map Pada Aplikasi Website Kita Sendiri

Seperti yang sudah dibahas diatas, kita akan mencoba menampilkan map dengan dua cara, yang mana bisa disesuaikan dengan kebutuhan kita masing-masing. Khusus untuk cara kedua (yang menggunakan API) kita diharuskan memiliki key terlebih dahulu, silahkan ambil key-nya dari sini (https://developers.google.com/maps/documentation/javascript/get-api-key). Berikut ini adalah contoh dari google map yang berhasil kita tampilkan pada halaman website kita sendiri :

Menampilkan Map Pada Web
Cara pertama, menggunakan tag iframe
Menampilkan Map Pada Web
Cara kedua menggunakan API

Materi

1. Menggunakan tag iframe

Pertama kita akan membahas bagaimana menampilkan google maps dengan menggunakan tag iframe, apa itu iframe? Iframe itu sendiri adalah sebuah tag elemen dari HTML yang memungkinkan kita untuk men-embed media dari suatu halaman. Untuk menggunakannya dengan google maps, silahkan copy code dibawah ini :

<h1>Membuat Google Maps dengan tag iframe</h1>
<iframe width="100%" height="300" frameborder="10" scrolling="no" marginheight="0" marginwidth="0" src="https://www.google.com/maps?q=-6.175307,106.827131&hl=es;z=14&output=embed"></iframe>

Untuk menyesuaikan daerah mana yang ingin ditampilkan pada halaman web, kita tinggal menyesuaikan kordinat yang kita dapat dari google maps kedalam parameter q (contoh : ?q=-6.175307,106.827131). Jadi untuk mengganti tampilan map kedaerah yang lain kita hanya tinggal merubah kordinat yang ada pada parameter q tersebut.

2. Menggunakan API

Untuk menggunakan cara kedua ini, pastikan anda sudah memiliki key yang diperoleh dari website resmi google. Untuk cara yang kedua ini agak rumit karena kita juga akan menggunakan sedikit javascript. Pertama copy code dibawah ini :

<h1>Membuat Google Maps dengan API</h1>
<input id="search-input" class="controls" type="text" placeholder="Cari...">
<div id="googleMap" style="width:100%;height:300px;"></div>
<div id="address"></div>
<div id="latitude"></div>
<div id="longitude"></div>

Dan berikutnya copy javascript dibawah ini :

var marker;
var map;
var geocoder;
var infowindow;
var searchBox;

function gMap() {
	var mapProp= {
		center:new google.maps.LatLng(-6.175307,106.827131),
		zoom:15,
	};

	map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
	geocoder = new google.maps.Geocoder();
		infowindow = new google.maps.InfoWindow();

	google.maps.event.addListener(map, 'click', function(event) {
		placeMarker(event.latLng);
		geoDecode();
	});

	searchBox = new google.maps.places.SearchBox(document.getElementById('search-input'));
	map.controls[google.maps.ControlPosition.TOP_CENTER].push(document.getElementById('search-input'));

	google.maps.event.addListener(searchBox, 'places_changed', function() {
		searchBox.set('map', null);
		var places = searchBox.getPlaces();
		var bounds = new google.maps.LatLngBounds();
		var i, place;

		for (i = 0; place = places[i]; i++) {
			(function(place) {
				marker = new google.maps.Marker({
					position: place.geometry.location
				});

				marker.bindTo('map', searchBox, 'map');

				google.maps.event.addListener(marker, 'map_changed', function() {
					if (!this.getMap()) {
						this.unbindAll();
					}
				});

				bounds.extend(place.geometry.location);

				geocoder.geocode({
			      'latLng': marker.getPosition()
			    }, function(results, status) {
					if (status == google.maps.GeocoderStatus.OK) {
						if (results[0]) {
							document.getElementById("address").innerHTML = 'Alamat : ' + results[0].formatted_address;
							document.getElementById("latitude").innerHTML = 'Latitude : ' + marker.getPosition().lat();
							document.getElementById("longitude").innerHTML = 'Longitude : ' + marker.getPosition().lng();
							infowindow.setContent(results[0].formatted_address);
							infowindow.open(map, marker);
						}
					}
			    });
			}(place));
		}

		map.fitBounds(bounds);
		searchBox.set('map', map);
		map.setZoom(Math.min(map.getZoom(),15));
		geoDecode();
	});
}

function placeMarker(location) {
    if (marker == null) {
		marker = new google.maps.Marker({
			position: location,
			map: map
		});
    } else {
        marker.setPosition(location);
    }
}

function geoDecode(){
	geocoder.geocode({
      'latLng': marker.getPosition()
    }, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {
			if (results[0]) {
				document.getElementById("address").innerHTML = 'Alamat : ' + results[0].formatted_address;
				document.getElementById("latitude").innerHTML = 'Latitude : ' + marker.getPosition().lat();
				document.getElementById("longitude").innerHTML = 'Longitude : ' + marker.getPosition().lng();
				infowindow.setContent(results[0].formatted_address);
				infowindow.open(map, marker);
			}
		}
    });
}

Sedikit penjelasan, fungsi gMap akan kita gunakan sebagai callback agar fungsinya dapat dijalankan oleh API google maps. Didalam fungsi gMap kita akan mendeklarasikan object google (new google.maps) dan menambahkan 2 event yaitu on click event (google.maps.event.addListener(map, ‘click’, function(event)) dan event untuk kotak pencarian (google.maps.event.addListener(searchBox, ‘places_changed’, function()). Selain itu kita juga memiliki fungsi placeMarker yang akan kita gunakan untuk melakukan pin point atau menempatkan titik pada map, dan fungsi geoDecode yang kita gunakan untuk memperoleh informasi wilayah dari titik yang kita tempatkan pada google maps.

Berikut ini adalah contoh full source code nya :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Google Maps</title>
</head>
<body>
	<h1>Membuat Google Maps dengan tag iframe</h1>
	<iframe width="100%" height="300" frameborder="10" scrolling="no" marginheight="0" marginwidth="0" src="https://www.google.com/maps?q=-6.175307,106.827131&hl=es;z=14&output=embed"></iframe>

	</br>

	<h1>Membuat Google Maps dengan API</h1>
	<input id="search-input" class="controls" type="text" placeholder="Cari...">
	<div id="googleMap" style="width:100%;height:300px;"></div>
	<div id="address"></div>
	<div id="latitude"></div>
	<div id="longitude"></div>

	<script>
		var marker;
		var map;
		var geocoder;
  		var infowindow;
  		var searchBox;

		function gMap() {
			var mapProp= {
				center:new google.maps.LatLng(-6.175307,106.827131),
				zoom:15,
			};

			map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
			geocoder = new google.maps.Geocoder();
  			infowindow = new google.maps.InfoWindow();

			google.maps.event.addListener(map, 'click', function(event) {
				placeMarker(event.latLng);
				geoDecode();
			});

			searchBox = new google.maps.places.SearchBox(document.getElementById('search-input'));
			map.controls[google.maps.ControlPosition.TOP_CENTER].push(document.getElementById('search-input'));

			google.maps.event.addListener(searchBox, 'places_changed', function() {
				searchBox.set('map', null);
				var places = searchBox.getPlaces();
				var bounds = new google.maps.LatLngBounds();
				var i, place;

				for (i = 0; place = places[i]; i++) {
					(function(place) {
						marker = new google.maps.Marker({
							position: place.geometry.location
						});

						marker.bindTo('map', searchBox, 'map');

						google.maps.event.addListener(marker, 'map_changed', function() {
							if (!this.getMap()) {
								this.unbindAll();
							}
						});

						bounds.extend(place.geometry.location);

						geocoder.geocode({
					      'latLng': marker.getPosition()
					    }, function(results, status) {
							if (status == google.maps.GeocoderStatus.OK) {
								if (results[0]) {
									document.getElementById("address").innerHTML = 'Alamat : ' + results[0].formatted_address;
									document.getElementById("latitude").innerHTML = 'Latitude : ' + marker.getPosition().lat();
									document.getElementById("longitude").innerHTML = 'Longitude : ' + marker.getPosition().lng();
									infowindow.setContent(results[0].formatted_address);
									infowindow.open(map, marker);
								}
							}
					    });
					}(place));
				}

				map.fitBounds(bounds);
				searchBox.set('map', map);
				map.setZoom(Math.min(map.getZoom(),15));
				geoDecode();
			});
		}

		function placeMarker(location) {
		    if (marker == null) {
				marker = new google.maps.Marker({
					position: location,
					map: map
				});
		    } else {
		        marker.setPosition(location);
		    }
		}

		function geoDecode(){
			geocoder.geocode({
		      'latLng': marker.getPosition()
		    }, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK) {
					if (results[0]) {
						document.getElementById("address").innerHTML = 'Alamat : ' + results[0].formatted_address;
						document.getElementById("latitude").innerHTML = 'Latitude : ' + marker.getPosition().lat();
						document.getElementById("longitude").innerHTML = 'Longitude : ' + marker.getPosition().lng();
						infowindow.setContent(results[0].formatted_address);
						infowindow.open(map, marker);
					}
				}
		    });
		}
	</script>
	<script src="https://maps.googleapis.com/maps/api/js?key=YOUR-API-KEY&callback=gMap&libraries=places"></script>
</body>

Penutup

Demikianlah beberapa cara untuk menampilkan map pada website kita sendiri menggunakan google maps, hal-hal diatas bersifat dasar dan umum, untuk lebih jelasnya bisa langsung saja dibaca pada dokumentasi resmi milik google, terima kasih.

Library Javascript Terbaik

tutorial javascript

Kali ini saya akan membahas beberapa library javascript terbaik versi saya, artikel ini ditujukan bagi teman-teman developer pemula (seperti saya) yang baru mulai atau sedang mempelajari bahasa pemrograman javascript. Saya katakan terbaik karena hampir disetiap project yang saya kerjakan saya menggunakan library-library ini. Selain karena mudahnya penggunaan, lengkapnya dokumentasi, kemudahan saat kita hendak men-custom dan juga lisensi yang open source membuat saya hampir selalu menggunakan library-library javascript ini. Dan berikut ini adalah list dari library javascript terbaik menurut saya.

BACA JUGA : https://soft-gain.com/2019/03/07/chained-dropdown-dengan-php-laravel-mysql-dan-ajax-jquery/

Daftar Library Javascript Terbaik

Berikut ini adalah daftar library javascript terbaik menurut saya, yang mungkin belum anda ketahui :

1. CKEditor

Library Javascript Terbaik
CKEditor

Jika anda membutuhkan sebuah text editor yang mendukung penggunaan rich text format RTF, maka library javascript yang satu ini bisa anda coba. Namanya adalah CKEditor, mengacu pada informasi di website resminya CKEditor sendiri pertama kali dibuat tahun 2003 oleh Frederico Knabben dan timnya, hingga sekarang masih terus dikembangkan dan memiliki 2 mayor version yaitu CKEditor 4 dan 5. Jika tertarik anda bisa langsung mengunjungi dokumentasi resminya di (https://ckeditor.com/docs/ckeditor4/latest/).

2. canvasJS

Library Javascript Terbaik
canvasJS

Anda ingin membuat sebuah tampilan dashboard yang menampilkan beberapa grafik chart sebagai re-presentasi data? canvasJS bisa menjadi solusi yang sangat membantu untuk anda. Library buatan Fenopix ini (sebuah perusahaan yang menfokuskan diri pada bidang visualisasi data), sudah mulai dirilis dari tahun 2013 dan terus dikembangkan hingga saat ini. Selain karena implementasi yang mudah dan dokumentasi yang lengkap, Fenopix selaku pengembang juga meng-klaim mudahnya integrasi dengan beberapa popular front end frameworks, jika tertarik silahkan kunjungi dokumentasi resminya di (https://canvasjs.com/docs/charts/basics-of-creating-html5-chart/).

3. DataTables

Library Javascript Terbaik
DataTables

Berikutnya ada DataTables, library buatan Allan Jardine (https://sprymedia.co.uk/index) ini pertama kali dirilis tahun 2007 dan masih dikembangkan hingga saat ini. Library javascript ini akan membantu kita dalam pengolahan data berbentuk table dari sisi front end. Library ini dapat secara otomatis membuatkan pagination, kolom pencarian, sorting per-kolom dan lain-lain. Jika anda tertarik bisa langsung dipelajari saja di dokumentasi resminya (https://datatables.net/examples/index).

4. Select2

Library Javascript Terbaik
Select2

Library javascript buatan Kevin Brown ini (https://kevin-brown.com/), dapat digunakan untuk me-manipulasi tag html select konvensional dengan bentuk yang lebih modern dan menarik untuk dilihat oleh user. Bukan hanya saja menambahkan sebuah kolom pencarian yang akan memudahkan user, library ini juga memungkinkan kita untuk membuat sebuah list option dengan multiple choices. Jika tertarik menggunakan library javascript ini bisa langsung dipelajari di dokumentasi resminya (https://select2.org/).

5. MomentJS

Anda pernah menggunakan Carbon pada PHP untuk memanipulasi waktu? Jika anda membutuhkan library dengan fungsi serupa namun dengan bahasa pemrograman javascript maka momentJS adalah jawabannya. Library javascript yang satu ini mulai dikembangkan dari tahun 2011 dan sampai saat ini masih terus mendapatkan update (informasi ini saya dapat dari repository code nya di github). Penggunaannya yang mudah dan dokumentasi-nya yang lengkap membuatnya menjadi salah satu library javascript yang selalu saya gunakan pada project yang saya kembangkan. Silahkan pelajari dokumentasi resminya di (https://momentjs.com/).

Penutup

Demikianlah informasi yang saya hendak bagikan kali ini. Mungkin saja list ini akan terus saya update jika saya menemukan adanya library javascript lainnya yang saya rasa bisa dijadikan opsi saat kita sedang mengembangkan project program berbasis web, karena seiring dengan terus berkembangnya bahasa yang satu ini, saya cukup yakin kalau library-library keren seperti yang sudah kita bahas diatas akan terus bermunculan. Terima kasih.

Chained dropdown dengan PHP laravel MySql dan AJAX Jquery

tutorial laravel

Chained dropdown dengan PHP laravel MySql dan AJAX Jquery adalah suatu metode pemanggilan data secara asynchronous pada basis data yang saling memiliki relasi. Pada kesempatan kali ini admin hendak membagikan pengalamannya bagaimana membuat dropdown yang saling terhubung satu sama lain atau istilahnya chained dropdown. Admin mengambil sample Country-State-City dropdown karena memang dropdown model ini banyak dipakai saat pembuatan aplikasi berbasis web. Langsung saja kita masuk pada pembahasan bagaimana membuat Chained dropdown dengan PHP laravel MySql dan AJAX Jquery.

Goals – Mampu membuat chained drop down menggunakan laravel dan ajax

Masih sama dengan artikel sebelumnya kita menggunakan Laravel sebagai back end side, MySql sebagai database Country-State-City yang akan di generate dan juga kali ini kita akan memakai fungsi AJAX Jquery getJSON. Tentu saja peranan getJSON disini menjadi sangat penting, karena dengan menggunakan fungsi ini respone yang dikirimkan oleh server terjadi secara real time tanpa men-refresh browser, tanpa jeda waktu membuat aplikasi yang kita buat terlihat dinamis dan lebih user friendly. Oke langsung kita mulai saja!

Baca juga tutorial dan contoh aplikasi website, web service & aplikasi android : https://soft-gain.com/2019/10/17/laravel-aplikasi-inventory-barang-berbasis-web/

Materi

Pertama siapkan databasenya, silahkan download database-nya DISINI. Database-nya tinggal di import saja di PC agan (atau saya menggunakan phpmyadmin sebagai interface pengelolaan database mysql saya). Setelah database di import, kita siapkan modelnya. 

Berikut ini model yang harus disiapkan, csc_countries.php:

<?php


namespace App;


use Illuminate\Database\Eloquent\Model;


class csc_countries extends Model

{

    

 protected $table='csc_countries';

    protected $fillable=[

        'name',

        'sortname',

        'phonecode'

    ];


}

csc_states.php:

<?php


namespace App;


use Illuminate\Database\Eloquent\Model;


class csc_states extends Model

{

    

 protected $table='csc_states';

    protected $fillable=[

        'name',

        'country_id'

    ];



}

csc_cities.php:

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class csc_cities extends Model

{

    

 protected $table='csc_cities';

    protected $fillable=[

        'name',

        'state_id'

    ];



}

Berikutnya kita siapkan controllernya, csccontroller.php:

<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use App\Http\Requests;

use Response;

use App\csc_cities;

use App\csc_states;

use App\csc_countries;


class csccontroller extends Controller

{

    

  public function chained_dopdown(){

    $csc_countrie=csc_countries::all();


    return view('chained-dropdown')->with('csc_countrie',$csc_countrie);

  }


  public function getStates($param){

      //GET THE ACCOUNT BASED ON TYPE

      $csc_state = csc_states::where('country_id','=',$param)->get();

      //CREATE AN ARRAY 

      $options = array();      

      foreach ($csc_state as $arrayForEach) {

                $options += array($arrayForEach->id => $arrayForEach->name);                

            }

      

      return Response::json($options);


    }


    public function getCities($param){

      //GET THE ACCOUNT BASED ON TYPE

      $csc_citie = csc_cities::where('state_id','=',$param)->get();

      //CREATE AN ARRAY 

      $options = array();      

      foreach ($csc_citie as $arrayForEach) {

                $options += array($arrayForEach->id => $arrayForEach->name);                

            }

      

      return Response::json($options);


    }



}

Lalu siapkan juga router yang akan menghubungkan request dari client ke server. Route.php:

Route::get('/chained_dopdown','csccontroller@chained_dopdown');

Route::get('/chained_dopdown/getStates/{param}','csccontroller@getStates');

Route::get('/chained_dopdown/getCities/{param}','csccontroller@getCities');

Selanjutnya kita siapkan file javascript untuk men-generate dropdown secara dinamis. csc.js:

$(document).ready(function(){


    var host = window.location.href;    


   $("#country").change(function() {


            $.getJSON(host + "/getStates/" + $("#country option:selected").val(), function(data) {

             //console.log(data);            

                var temp = [];

                //CONVERT INTO ARRAY

                $.each(data, function(key, value) {

                    temp.push({v:value, k: key});

                });

                //SORT THE ARRAY

                temp.sort(function(a,b){

                   if(a.v > b.v){ return 1}

                    if(a.v < b.v){ return -1}

                      return 0;

                });

                //APPEND INTO SELECT BOX

                $('#state').empty();

                $('#state').append('<option>Select State/Province</option>');

                $('#city').empty();

                $('#city').append('<option>NA</option>');

                $.each(temp, function(key, obj) {

                    $('#state').append('<option value="' + obj.k +'">' + obj.v + '</option>');

                });

            });                

            

        }); 


        $("#state").change(function() {


            $.getJSON(host + "/getCities/" + $("#state option:selected").val(), function(data) {

                //console.log(data);

                var temp = [];

                //CONVERT INTO ARRAY

                $.each(data, function(key, value) {

                    temp.push({v:value, k: key});

                });

                //SORT THE ARRAY

                temp.sort(function(a,b){

                   if(a.v > b.v){ return 1}

                    if(a.v < b.v){ return -1}

                      return 0;

                });

                //APPEND INTO SELECT BOX

                $('#city').empty();

                $.each(temp, function(key, obj) {

                    $('#city').append('<option value="' + obj.k +'">' + obj.v + '</option>');           

                });            

            });

            

        }); 


});//end of document ready

Terakhir kita siapkan view-nya. chained-dropdown.blade.php:

@extends('layouts.app')

@section('content')

<div class="container">

    <div class="row">

        <div class="col-md-10 col-md-offset-1">

            <div class="panel panel-default">

                <div class="panel-heading">Chained Dropdown</div>


                <div class="panel-body">                            

                    <label>Country</label>

                        <select name="state_province" id="country">

                            <option value="">Select Country</option>

                            @foreach($csc_countrie as $csc_countries)

                                <option value="{{$csc_countries->id}}">{{$csc_countries->name}}</option>

                            @endforeach

                        </select>

                    <br>


                    <label>State</label>

                        <select name="state_province" id="state">

                            <option value="">NA</option>

                        </select>

                    <br>


                    <label>City</label>

                        <select name="city" id="city">

                            <option value="">NA</option>

                        </select>

                </div>

            </div>

        </div>

    </div>

</div>

<script type="text/javascript" src='{{URL::asset("js/jquery-1.12.4.min.js")}}'></script>

<script type="text/javascript" src='{{URL::asset("js/csc.js")}}'></script>

@endsection

Dan persiapan kitapun selesai. Penjelasan singkatnya kurang lebih begini. Table country, state dan city saling terhubung satu sama lain atau memiliki relasi, dimana table country dan table state dihubungkan oleh kolom id(pada table country) dan kolom country_id(pada table state), begitu juga dengan table state dan city, id(pada table state) dan kolom state_id(pada table city). 

Jadi, saat user memilih nama country, maka id nya akan dikirm kan ke controller dan dicocokan ke database (melalui model) sehingga controller akan mencocokan id country mana yang dimaksud oleh user pada table state barulah setelahnya respone dikembalikan ke user.

public function getStates($param){

      //GET THE ACCOUNT BASED ON TYPE

      $csc_state = csc_states::where('country_id','=',$param)->get();

      //CREATE AN ARRAY 

      $options = array();      

      foreach ($csc_state as $arrayForEach) {

                $options += array($arrayForEach->id => $arrayForEach->name);                

            }

      

      return Response::json($options);

Nah magic-nya terjadi disini. Respone diterima oleh getJSON (pada file csc.js) dan di tampilkan pada view.

$("#country").change(function() {


            $.getJSON(host + "/getStates/" + $("#country option:selected").val(), function(data) {

             //console.log(data);            

                var temp = [];

                //CONVERT INTO ARRAY

                $.each(data, function(key, value) {

                    temp.push({v:value, k: key});

                });

                //SORT THE ARRAY

                temp.sort(function(a,b){

                   if(a.v > b.v){ return 1}

                    if(a.v < b.v){ return -1}

                      return 0;

                });

                //APPEND INTO SELECT BOX

                $('#state').empty();

                $('#state').append('<option>Select State/Province</option>');

                $('#city').empty();

                $('#city').append('<option>NA</option>');

                $.each(temp, function(key, obj) {

                    $('#state').append('<option value="' + obj.k +'">' + obj.v + '</option>');

                });

            });                

            

        }); 

Begitu juga mekanisme yang terjadi pada state dan city, id pada state yang dipilih dicocokan dengan table city dan barulah responenya dikembalikan ke user.

public function getCities($param){

      //GET THE ACCOUNT BASED ON TYPE

      $csc_citie = csc_cities::where('state_id','=',$param)->get();

      //CREATE AN ARRAY 

      $options = array();      

      foreach ($csc_citie as $arrayForEach) {

                $options += array($arrayForEach->id => $arrayForEach->name);                

            }

      

      return Response::json($options);


    }


$("#state").change(function() {


            $.getJSON(host + "/getCities/" + $("#state option:selected").val(), function(data) {

                //console.log(data);

                var temp = [];

                //CONVERT INTO ARRAY

                $.each(data, function(key, value) {

                    temp.push({v:value, k: key});

                });

                //SORT THE ARRAY

                temp.sort(function(a,b){

                   if(a.v > b.v){ return 1}

                    if(a.v < b.v){ return -1}

                      return 0;

                });

                //APPEND INTO SELECT BOX

                $('#city').empty();

                $.each(temp, function(key, obj) {

                    $('#city').append('<option value="' + obj.k +'">' + obj.v + '</option>');           

                });            

            });

            

        });

Penutup

Selesai sudah pembahasan kita kali ini, semoga bermanfaat dan mohon maaf kalau ada penjelasan yang kurang dapat dimengerti, pun kalau ada koreksi perihal penjelasan saya boleh di cantumkan dalam kolom komentar. Terima Kasih

Live searching box dan highlight dengan Jquery

tutorial javascript

Live searching box dan highlight dengan Jquery (https://jquery.com/) cukup banyak di gunakan belakangan ini. Dan kebetulan baru-baru ini admin diminta klien untuk dibuatkan suatu searching box tetapi yang cara kerjanya live (real time), jadi user tidak mau repot dan lama menunggu loading selagi data dari database di query untuk di tampilkan hasil pencariannya. Sebetulnya code ini belum dicoba lebih jauh, dan refrensinya pun dari google, belum di tes juga kalau jumlah data yang di cari besar (big data), tapi sudah di rasa cukup untuk memenuhi permintaan klien admin yang tadi. Baiklah berikut ini full code Live searching box dan highlight dengan Jquery, bisa langsung di copy paste saja:

<input type="text" id="search" placeholder="Search...">

<table id="table" border="1">

     <thead>

            <tr>

                <th>Nama</th> 

                <th>Alamat</th> 

            </tr>

     </thead>

     <tbody>   

      <tr>

       <td>Anisa</td>

       <td>Jakarta</td>       

      </tr> 

      <tr>

       <td>Anton</td>

       <td>Jakarta</td>

      </tr>

      <tr>

       <td>Budi</td>

       <td>Bandung</td>

      </tr>

      <tr>

       <td>Basuki</td>

       <td>Jakarta</td>

      </tr>

      <tr>

       <td>Cika</td>

       <td>Solo</td>

      </tr>

      <tr>

       <td>Cyntia</td>

       <td>Palembang</td>

      </tr>

      <tr>

       <td>Desy</td>

       <td>Solo</td>

      </tr>

      <tr>

       <td>Donald</td>

       <td>Jakarta</td>

      </tr>

     </tbody>

</table>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script type="text/javascript">

var $rows = $('#table >tbody >tr:visible');

$('#search').keyup(function() {

    // fungsi untuk search

    var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$',

        reg = RegExp(val, 'i'),

        text;

    $rows.show().filter(function() {

        text = $(this).text().replace(/\s+/g, ' ');

        return !reg.test(text);

    }).hide();


    var value = $(this).val().toLowerCase();    

    // fungsi untuk highlight

    $("#table >tbody >tr >td").each(function(index, elem) {

        var $elem = $(elem);

        if (value.length > 0 && $elem.text().toLowerCase().indexOf(value) != -1) {

            $elem.css('backgroundColor', 'yellow');             

        }

        else {

            $elem.css('backgroundColor', '');             

        }

    });

});

</script>

Dan berikut ini demonstrasi nya :

Nama Alamat
Anisa Jakarta
Anton Jakarta
Budi Bandung
Basuki Jakarta
Cika Solo
Cyntia Palembang
Desy Solo
Donald Jakarta


Jadi saat user mengetikan kata pencarian pada search box, maka jquery akan mem-filter table dan menampilkan data yang cocok saja. Hal ini tentu akan membuat tampilan lebih menarik dan user friendly. Terima kasih.