peri hokiperihokiclarustologisticsrimashaop.compola taktis menang gates of olympus x1000 perihokipemain perihoki bongkar trik jepep starlight princess x1000perihoki beri panduan lengkap bermain mahjong ways 2 pgsofttips cara penghasil uang pgsoft mahjong ways 2 perihokimahjong wins 3 perihoki memberikan penggali terbesarfenomena gates of olympus buka peluang besar bagi duta76cara dapat pola emas rahasia di duta7 wild west goldtrik menang pgsoft mahjong ways 2 modal receh maxwin duta76duta76 main pgsoft mahjong ways 2 di sela istirahatscatter hitam mahjong wins 3 spin pasti jepe duta76perihoki spin mahjong ways 2 pgsoft scatter hitam maxwinsimbol mahjong wins 3 yang sering muncul di awal perihokitrik gampang menang mahjong winscuan mahjong wins 3 tanpa hentipola spin taruhan kecil mahjong winsstrategi kunci scatter hitam beruntungacor total mahjong wayskemenangan maksimal mahjong wayskemenangan pria pekanbaru mahjong waysmahjong wins3 fenomena baru sumatera baratmenangkan mahjong dengan lincahmenembus batas keberuntungan mahjong waysmenjajal keberuntungan di mahjong wayspola gratis mahjong ways1scatter hitam senjata rahasia mahjong winsteknik spinning menguntungkan untuk scatter hitamanalisis rtp tertinggi mahjong winsfenomena scatter hitam mahjong winsibu rumah tangga dan keberuntungan mahjongkeseruan main mahjong wins3menang mahjong pengguna baru di sosial mediamenghargai setiap momen di mahjong waysserunya main mahjong di warung internetspin slow motion mancing scatterstrategi jitu maxwin mahjong waysstrategi jitu menang mahjong modal kecil jackpot besaranak kampung papua menggemparkan mahjongkeajaiban scatter hitam mahjong wayskeberhasilan joni mahjong winskejaiban mahjong ways di ujung jalanketua mahjong wins3 kehadiran kemenangan dimulai dari balimahjong kehadiran yang menguntungkanmahjong menggila adat88panduan kilat raih 108 jutatips memenangkan mahjongbarista kopi menang 110 juta spin mahjongdakota76 scatter hitam mahjong wins 3gagal cpns menang mahjong wins 3 rp120 jutakisah karyawan minimarket dapat thr lebih awal mahjong winskisah pelajar sma kuasai mahjong wins 3 inspirasi sekolahkisah penjaga parkir tanah abang motor baru mahjong winskisah sukses ibu rumah tangga bandung mahjong winsmahasiswa kkn beli iphone15 mahjong wins3 dakotamantan anak band influencer mahjong scatter hitampola rtp senin gates of olympus guru matematikaidola scatter hitam gampang meledakidola sensasi jackpotidola pola scatter hitamidola hasilkan jackpot dalam waktu singkatidola mahjong wins 3 bocortukang cuci motor menemukan keberuntungan di mahjong

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 282

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_cookie_params(): Cannot change session cookie parameters when headers already sent

Filename: Session/Session.php

Line Number: 294

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 304

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 314

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 315

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 316

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 317

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 375

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: drivers/Session_files_driver.php

Line Number: 108

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_save_handler(): Cannot change save handler when headers already sent

Filename: Session/Session.php

Line Number: 110

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_start(): Cannot start session when headers already sent

Filename: Session/Session.php

Line Number: 143

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

Delay the keyup event for jquery ajax - Freetuts
PHP AJAX
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Delay the keyup event for jquery ajax

Có thể nói ajax là một kỹ thuật được ứng dụng rất rộng rãi trong các ứng dụng web vì sự mượt mà của nó, nhất là kết hợp với các hiệu ứng jquery. Nhưng để xử lý tiến trình ajax thật sự rất mơ hồ với những bạn mới làm quen với ajax. Một ví dụ điển hình là xây dựng chức năng search cho sự kiện keyup event, nếu ta nhập dữ liệu liên tục thì nó sẽ gửi request liên tục lên server, điều này  không hay lắm, thay vào đó ta sẽ gửi một request cuối cùng (ký tự cuối cùng nhập vào sẽ gửi ajax). Đây chính là kỹ thuật mà ta sẽ tìm hiểu trong bài này với tên gọi delay keyup event.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước khi vào vấn đề chính ta sẽ tạo một số file trong quá trình xử lý đã nhé.

1. Tạo các file xử lý liên quan

Tạo file result.php: File này có nhiệm vụ là nhận nội dung cần tìm và trả về kết quả, nhưng để đơn giản không có sử dụng database thì tôi sẽ trả về kết quả của chuỗi nhận vào, nội dung như sau:

 

Bài viết này được đăng tại [free tuts .net]

<?php
echo isset($_GET['title']) ? $_GET['title'] : '';
?>

 

Tạo file index.php: File này hiển thị input#title nhập dữ liệu tìm kiếm, một thẻ div#result dùng để hiển thị kết quả trả về, một đoạn mã script trong đó có sự kiện keyup. Và đương nhiên là không thể thiếu đoạn code import file jquery vào.

 

<!DOCTYPE html>
<html>
    <head>
        <title>Delay the keyup event for jquery ajax</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="robots" content="noindex,nofollow"/>
        <script language="javascript" src="http://code.jquery.com/jquery-2.0.0.min.js"></script>
        <script language="javascript">
        
        $('#title').keyup(function()
        {
            // Nội dung search
        });
        
        </script>
    </head>
    <body>
        <a href="https://freetuts.net" title="Học lập trình online">Về trang chủ</a> <br/> <hr/>
        <input type="text" id="title" value=""/>
        <hr/>
        <div id="result"></div>
    </body>
</html>

 

Note: Nội dung trong bài có sử dụng ajax, nếu bạn chưa biết thì xem bài tìm hiểu ajax là gì.

2. Không sử dụng delay keyup event để gửi ajax

Cách này thì rất thông thường, ta chỉ cần bắt sự kiện keyup và lấy nội dung, sau đó gửi ajax.

 

$('#title').keyup(function()
{
    var data = {
        title : $('#title').val()
    };
    $.ajax({
        type : 'get',
        dataType : 'text',
        data : data,
        url : 'result.php',
        success : function (result){
            $('#result').html(result);
        }
    });
});

 

Nhược điểm của cách này là ajax sẽ gửi liên tục, mỗi khi nhập một ký tự vào nó sẽ gửi ajax nên sẽ tốn tài nguyên hệ thống và đôi khi hiển thị kết quả trả về lệch nhau do request trước trả kết quả về sau.  Với cách này tôi có viết một bài tương tự đó là bài Search Ajax Autocomplete.

3. Kỹ thuật Delay the keyup event for jquery ajax

Trước tiên bạn phải biết qua hàm setTimeout trong javascript dùng để thiết lập thời gian chạy một action nào đó và hàm clearTimeout dùng để bỏ đi sự kiện mà ta đã xử lý ở hàm setTimeout.

Ví dụ:

 

// Thiết lập trong thời gian 5 giây tới sẽ chạy đoạn code 
// alert lên chuỗi 123
var timeout = setTimeout(function(){
    alert('123');
}, 5000);


// Clear đi đói tượng timeout, lúc này đoạn code 
// alert sẽ không thực hiện được
clearTimeout(timeout);

 

Bây giờ ta sẽ ứng dụng 2 hàm này để thiết lập delay keyup event ajax:

Ý tưởng như sau, ở mỗi sự kiện keyup ta sẽ không gửi ajax liền mà ta sẽ dùng hàm setTimeout để thiết lập 1 giây sau mới gửi ajax tiếp, đồng thời trước khi thực hiện setTimeout thì ta sẽ dùng hàm clearTimeout để xóa đi những gì mà ta thiết lập trước đó. Như vậy khi ta gõ những ký tự gần nhau trong khoảng thời gian dưới 1 giây thì nó sẽ không gửi đi, chi khi nào ta dừng ko gõ thì 1 giây sau ajax sẽ được thực hiện. Đoạn code như sau:

 

// Delay the keyup event for jquery ajax
$(document).ready(function()
{
    // Khai báo đối tượng timeout để dùng cho hàm
    // clearTimeout
    var timeout = null;

    // Sự kiện keyup
    $('#title').keyup(function()
    {
        // Xóa đi những gì ta đã thiết lập ở sự kiện 
        // keyup của ký tự trước (nếu có)
        clearTimeout(timeout);

        // Sau khi xóa thì thiết lập lại timeout
        timeout = setTimeout(function ()
        {
            // Lấy nội dung search
            var data = {
                title : $('#title').val()
            };

            // Gửi ajax search
            $.ajax({
                type : 'get',
                dataType : 'text',
                data : data,
                url : 'result.php',
                success : function (result){
                    $('#result').html(result);
                }
            });
        }, 1000);
    });
});

 

Qua phần comment tôi đã giải thích rõ rồi tôi không giải thích gì thêm. Hãy chú ý đoạn code jquery ajax rất quan trọng, các bạn chỉ cần đọc code, xem demo và download về coi sẽ hiểu ra được vấn đề rất dễ dàng.

Và đây là hình hiển thị thành quả của chúng ta.

delay the keyup event for jquery ajax png

4. Lời kết

Khi làm việc với ajax ta sử dụng những mẹo rất nhỏ để áp dụng vào thì tiến trình xử lý sẽ rất là mượt và đáp ứng được yêu cầu của hệ thống. Như ví dụ trên không phải là một thứ gì to tác mà chỉ là một kỹ thuật nho nhỏ với tên gọi Delay the keyup event for jquery ajax rất đơn giản mà hiệu quả.

Cũng còn có nhiều cách giải quyết vấn đề này nên nếu bạn có cách nào hay thì hãy chia sẻ cho mọi người nhé.

Danh sách file tải về

Tên file tải về Pass giải nén
Tải bài học định dạng PDF freetuts.net hoặc gameportable.net

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top