ข้ามไปที่เนื้อหาหลัก

อัพเดตซอร์สโค๊ดตัวอย่าง Autocomplete ด้วย jQuery


อัพเดตซอร์สโค๊ดตัวอย่าง Autocomplete ด้วย jQuery
หลังจากที่เคยนำเสนอเรื่อง Autocomplete ไปแล้วในบทความ "ตัวอย่างการทำ Autocomplete แบบลดจำนวนการคิวรี่ MySQL" แต่ยังไม่เห็นความชัดเจนพอ เลยอัพเดตซอร์สโค๊ดใหม่ให้ทดลองกันเองไปเลย โดยที่เริ่มจากข้อมูลพนักงานไม่เกิน 1,000 เรคอร์ด(เฉพาะสถานะ Active นะ คนลาออกไปแล้วไม่ต้องแสดง) กับข้อมูล 10,000 เรคอร์ด จะเห็นผลเรื่องประสิทธิภาพที่ต่างกัน



จากที่ได้เขียนโปรแกรมโดยใช้ jQuery Autocomplete ร่วมกับ PHP + MySQL จะเห็นว่าการพิมพ์ชื่อติดต่อกันเร็วๆ จะมีการส่งค่าด้วย AJAX เมื่อช่องค้นหามีตัวอักษรตั้งแต่ 2 ตัวขึ้นไป jQuery Autocomplete จะไม่ได้ทำการค้นหาทุกครั้งที่มี keyup เพราะกรณีพิมพ์ชื่อยาวๆ 6 ตัวติดการจะเกิดการเรียกข้อมูลจากฐานข้อมูลติดต่อกันมากเกินไป สังเกตจาก Firebug จะเห็นว่ารายการก่อนๆ จะถูก Abort เหลือเพียงการส่งข้อมูลล่าสุดเท่านั้นที่จะยังคงทำงาน

ในส่วนก่อนหน้านั้นไม่แน่ใจว่าเรียกคิวรี่ฐานข้อมูลไปหรือยัง แต่ก็ไม่ได้ส่งผลเรื่องการคืนค่ากลับมาแสดงผลชนกันกับคำสั่งค้นหาอื่นๆ


ส่วนแบบที่ใช้วิธีเก็บลง Array ก่อนนั้นถ้าข้อมูลมีมากเกินไปจะเห็นว่าเกิดอาการค้างเป็นระยะๆ ดังนั้นลองทดสอบดูนะครับ ว่าระดับข้อมูลไหนน่าจะนำมาใช้กับวิธีใด


แบบฟอร์ม HTML

<table cellpadding="10">
    <thead>
        <tr>
            <th><h3 style="color:blue">Autocomplete แบบคิวรี่ทุกครั้ง</h3></th>
            <th><h3 style="color:green">Autocomplete แบบคิวรี่เก็บไว้ใน Array</h3></th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <div class="ui-widget">
                <label for="birds">ค้นหาสมาชิก : </label>
                <input id="birds">
                </div>
                <div class="ui-widget" style="margin-top:2em; font-family:Arial">
                ผลลัพธ์ที่เลือก :
                <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
                </div>
            </td>
            <td>
                <div class="ui-widget">
                <label for="birds">ค้นหาสมาชิก : </label>
                <input id="user_fullname">
                </div>
                <div class="ui-widget" style="margin-top:2em; font-family:Arial">
                ผลลัพธ์ที่เลือก :
                <div id="log2" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
                </div>
               
            </td>
        </tr>
    </tbody>
</table>

Autocomplete แบบคิวรี่ทุกครั้ง

 <script>
 var ajaxURL = "ajax_service.php?source=member";
$(function(){
    function log( message ) {
        $( "<div>" ).text( message ).prependTo( "#log" );
        $( "#log" ).scrollTop( 0 );
    }
    $( "#birds" ).autocomplete({
        source: ajaxURL + "&action=search",
        minLength: 2,
        select: function( event, ui ) {
            log( ui.item ?
            ui.item.id + " : " + ui.item.value :
            "Nothing selected, input was " + this.value );
        }
    });
});
</script>

Autocomplete แบบคิวรี่เก็บไว้ใน Array

<script type="text/javascript">
var autoCompleteData = new Array();

function setAutoComplete(){
    $( "#user_fullname" ).autocomplete({
      minLength: 0,
      source: autoCompleteData,
      select: function( event, ui ) {
        //$( "#user_fullname" ).val( ui.item.label );
        $( "<div>" ).text( ui.item.value + ' : ' + ui.item.label ).prependTo( "#log2" );
        $( "#log2" ).scrollTop( 0 );
        return false;
      }
    })
    .data( "ui-autocomplete" )._renderItem = function( ul, item ) {
      return $( "<li>" )
        .append( "<a>" + item.label + "</a>" )
        .appendTo( ul );
    };
}
//เรียกข้อมูลสมาชิกมาเก็บไว้ในตัวแปร autoCompleteData ผ่านการรับส่งข้อมูลแบบ AJAX
$.ajax({
    dataType: "json",
    url: ajaxURL + "&action=query",
    success: function(return_data){
        autoCompleteData = return_data;
        setAutoComplete();
    }
});
</script>


โค๊ดส่วนของ PHP+MySQL

<?php
include_once('classes/connection.php');

/***** FUNCTION DEFINED  *****/
function search(){
    $db = new dbConnect();
    $search_key = isset($_GET['term']) ? $_GET['term'] : '';
    $no = 0;
    $data = array();
    $sql = "SELECT mbr_code, mbr_name FROM `tb_member` WHERE mbr_name LIKE '%$search_key%' ";  //-- ข้อมูลสาขาทั้งหมด
    $qry = mysql_query($sql) or die( $db->showError('',__FILE__,__LINE__) );
    while($row = mysql_fetch_assoc($qry)){
        $data[] = array('id'=>$row['mbr_code'], 'value'=>$row['mbr_name']);
    }
    echo json_encode($data);
}

function query(){
    $db = new dbConnect();//เชื่อมต่อฐานข้อมูล
    $data = array();
    $sql = "SELECT mbr_code, mbr_name FROM `tb_member` WHERE mbr_status > 0 ";  //-- ข้อมูลสมาชิกที่ใช้งาน
    $qry = mysql_query($sql) or die( $db->showError('',__FILE__,__LINE__) );
    while($row = mysql_fetch_assoc($qry)){
        $data[] = array('value'=>$row['mbr_code'], 'label'=>$row['mbr_name']);
    }
    echo json_encode($data);
}
//-- END DEFINE FUNCTION


//***** Call Function *****//
$action = isset($_POST['action']) ? $_POST['action'] : '';
if($action == '') $action = isset($_GET['action']) ? $_GET['action'] : '';
switch( $action ){
    case 'search':
        search();
        break;
    case 'query':
        query();
        break;   
}
//-- END Call Function

?>



http://www.sunzan-design.com/p/download-php-source-code.html ดาวน์โหลดซอร์สโค๊ดรวมตัวอย่าง





PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

การดึงข้อมูล MySQL มาแสดงในปฏิทิน Fullcalendar ด้วย PHP

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode() PHP Code <?php //Database $data = array(); $link = mysqli_connect("127.0.0.1", "tobedev", "1234", "tobedev_example"); mysqli_set_charset($link, 'utf8'); if (!$link) {     echo "Error: Unable to connect to MySQL." . PHP_EOL;     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;     exit; } $query = "SELECT * FROM tb_event"; if ($result = $link->query($query)) {     /* fetch object array */     while ($obj = $result->fetch_object()) {        $data[] = array(                     'id' => $obj->id,                     'title'=> $obj->titl