ตัวอย่างนี้เป็นแนวทาง สำหรับการแจ้งเตือนว่ามีการเพิ่มรายการใหม่เข้ามาในฐานข้อมูล
ในลักษณะเช่น เมื่อมีรายการสั่งซื้อเข้ามาใหม่ หรือเมื่อมีเพิ่มข้อมูลสินค้าใหม่ หรือเมื่อมีการสมัคร
สมาชิกเข้ามาใหม่ ประมาณนี้เป็นต้น หลักการคือ ใช้ ajax ดึงจำนวนรายการทั้งหมดมาแสดง
ในครั้งแรก และเก็บค่าไว้ใน data attribute ของ html5 โดยใช้การกำหนดเวลาให้ทำงานทุกๆ เวลา
ที่กำหนด ใช้ setInterval() ฟังก์ชั่น และเมื่อมีข้อมูลเข้ามาใหม่ ให้นำค่าที่ส่งกลับมาในรอบที่ 2
หรือรอบถัดไป มาเช็คกับค่าเดิม ถ้าเป็นค่าที่มากกว่าค่าเดิม ก็ให้ขึ้นแจ้งเตือน ในที่นี้จะใช้รูปแบบ
alert() ธรรมดา สามารถไปประยุกต์เพิ่มเติมได้
ก่อนอื่นสร้างไฟล์สำหรับดึงจำนวนข้อมูลทั้งหมดที่ต้องการเช็ค
ไฟล์ dbconnect.php
<?php
$mysqli = new mysqli("localhost", "root","","test");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if(!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
}
ไฟล์ ajax_checkitem.php
<?php
header("Content-type:application/json; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
require_once("dbconnect.php");
$sql = "
SELECT COUNT(id_data1) as total FROM tbl_temp
";
$result = $mysqli->query($sql);
if($result && $result->num_rows > 0){
$row = $result->fetch_assoc();
$json_data[] = array(
"num_total" => $row['total']
);
}
// แปลง array เป็นรูปแบบ json string
if(isset($json_data)){
$json= json_encode($json_data);
if(isset($_GET['callback']) && $_GET['callback']!=""){
echo $_GET['callback']."(".$json.");";
}else{
echo $json;
}
}
?>
ไฟล์ ajax ของเราจะส่งกลับข้อมูลมาในรูปแบบ json string
โดยใช้ property ชื่อว่า num_total ที่เก็บจำนวนรายการทั้งหมด ส่งกลับมา
สามารถประยุกต์เพิ่มค่าอื่นๆ เพิ่มเติมได้
ตัวอย่างไฟล์ดึงข้อมูล
ไฟล์ mydemo.php
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
#place_total{
color:red;
font-weight:bold;
}
</style>
<br>
<div style="margin:auto;">
<!--// ใช้ แท็ก a กำนหด id สำหรับอ้างอิง และกำหนด data attrubute ชื่อ totalitem-->
<a data-totalitem="" id="place_total">0</a>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js" ></script>
<script type="text/javascript">
$(function(){
///////////
// ตัวแปรสำหรับเก็บค่าจำนวนล่าสุด
var curentTotal = null;
var getNewItem = function(){
$.post("ajax_checkitem.php",function(response){
// ถ้ามีการส่งข้อมูลกลับมา
if(response && response.length){
// เก็บค่าเดิมจาก data attribute ชื่อ totalitem
curentTotal = $("#place_total").data("totalitem");
if(curentTotal==""){ // ครั้งแรกจะเป็นค่าว่าง
// กำหนด data attribute ชื่อ totalitem ให้มีค่าเท่ากับค่าที่ได้จาก ajax
$("#place_total").data('totalitem',''+response[0].num_total+'');
}else{
// ถ้าค่าที่ส่งกลับมา มากกว่าค่าเดิม
if(response[0].num_total > curentTotal){
alert("มีรายการมาใหม่");
// กำหนด data attribute ชื่อ totalitem ให้มีค่าเท่ากับค่าที่ได้จาก ajax ค่าใหม่
$("#place_total").data('totalitem',''+response[0].num_total+'');
}
}
// แสดงข้อความเป้จำนวนรายการทั้งหมด
$("#place_total").text(response[0].num_total);
}
});
};
// เรียกใช้งานฟังก์ชั่นครั้งแรกเมื่อเข้ามาหน้านี้
getNewItem();
// กำหนดทำงานทุกๆ 7000 เท่ากับ 7 วินาที // 1000 = 1 วินาที
setInterval(function(){
getNewItem();
},7000);
//////////////
});
</script>
</body>
</html>
เนื้อหาข้างต้นเป็นแนวทางสำหรับประยุกต์แจ้งเตือนรายการใหม่อย่างง่ายด้วย ajax การกำหนดความถึ่ของเวลา
ถ้ากำหนดน้อย อาจทำให้ server ทำงานหนัก ควรกำหนดในเวลาที่เหมาะสมขึ้นกับว่าต้องการข้อมูลที่อัพเดท
มากน้อยเพียงใด เช่นถ้าต้องการข้อมูลอัพเดท ทุกๆ 30 วินาที ก็กำหนด 30000 แบบนี้เป็นต้น