เอแจ็กซ์ (AJAX) | ||
เอแจ็กซ์ (AJAX) = Request a Server ?
เอแจ็กซ์ (AJAX - Asynchronous JavaScript And XML) คือ เทคนิคหนึ่งในการพัฒนาเว็บแอปพลิเคชัน เพื่อให้สามารถโต้ตอบกับผู้ใช้ดีขึ้น ด้วยการรับส่งข้อมูลในฉากหลัง (Background Processing) ทำให้ไม่ดาวน์โหลดทั้งเว็บเพจใหม่ทุกครั้ง เมื่อเปลี่ยนข้อมูลบางส่วนในเว็บเพจ ช่วยให้การตอบสนองรวดเร็วขึ้น
|
ต.ย. บริการ AJAX ผ่าน gallery.htm source : gallery.php [v1] ถ้าชอบก็คัดลอกโค้ดไปแก้ไขได้ครับ |
ความแตกต่าง
เอแจ็กซ์เอ็นจิน (Ajax Engine) คือตัวกลางระหว่างผู้ใช้ และเครื่องบริการ ทำให้ผู้ใช้สามารถทำงานได้ไม่ติดขัด การติดต่อกับเครื่องบริการจะประมวลผลในฉากหลัง (Background Processing) แล้วส่งข้อมูลมาแสดงแทนที่ข้อมูลเดิมบางส่วนบนเว็บเพจที่ถูกเปิดมาแล้วก่อนหน้านี้ แต่การประมวลผลแบบเดิมจะส่งการควบคุมไปให้กับเครื่องบริการ แล้วก็จะส่งผลลัพธ์มาแสดงแทนที่เว็บเพจเดิมทั้งหมด |
ต.ย. 1 : การแสดงเวลาอย่างง่าย บน internet explorer 1. สร้าง time.htm เรียกใช้ค่าจาก time.php 2. นำค่าที่ได้มาจาก time.php แสดงใน time ของ time.htm 3. กำหนด onkeyup ใน text ให้เรียก ajaxFunction() 4. ตัวอย่างนี้ใช้ได้กับ IE เท่านั้น time.htm |
ต.ย. 2 : การแสดงเวลาอย่างง่าย บนทุก browser คล้าย time.htm timeall.htm |
ต.ย. 3 : timeallasp.htm
ได้นำโปรแกรม timeall.htm ที่ทดสอบกับ linux server มาปรับเป็น http://www.thaiabc.com/ajax/timeallasp.htm แล้วใช้บน windows server โดยเขียน code ภาษา asp ให้คืนค่ากลับมา แบบไม่ส่ง parameter ไป ได้ดังตัวอย่างนี้ <% response.write(now() & time()) %> ตัวอย่าง code ที่จะส่งค่าไป xmlHttp.open("GET","y.php?user=" + document.myForm.user.value , true); |
ต.ย. 4 : การแสดงเวลาอย่างง่าย บนทุก browser 1. สร้าง number.htm เรียกใช้ค่าจาก number.php 2. ส่งตัวเลขให้ number.php ช่วยอ่านเป็นภาษาอังกฤษ 3. กำหนด onkeyup ใน text ให้เรียก ajaxFunction() number.htm |
ต.ย. 5 : การแสดงเวลาแบบไม่ซ้ำ 1. สร้าง timeclk.htm ที่ปรับมาจาก time.htm 2. ใช้กับ Browser ได้หลายรุ่น และเวลาไม่ซ้ำ 3. ปุ่มสั่งงานด้วย onclick 4. เวลาแสดงไม่ซ้ำ เพราะส่งค่าที่ต่างกันให้กับ time.php timeclk.htm |
time.php <? echo date("d/m/Y H:i:s"); ?> |
ต.ย. 6 : โปรแกรมฝั่งส่งข้อมูล เช่น x.htm |
<script type="text/javascript"> function ajaxFunction() { var xmlHttp; xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.uname.value=xmlHttp.responseText; } } xmlHttp.open("GET","y.php?user=" + document.myForm.user.value , true); xmlHttp.send(null); } </script> <form action=y.php method=post name="myForm"> <input name=user size=12 onkeyup="ajaxFunction();"> <input name=uname size=25 disabled style="background-color:yellow"> <input type=submit value=เข้าใช้> </form> |
ต.ย. 7 : โปรแกรมรับข้อมูลแล้วส่งกลับ เช่น y.php |
<? session_start(); if (isset($_GET['user'])) { $db = "sar.mdb"; $db_connection = new COM("ADODB.Connection"); $db_connstr="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" . realpath($db); $db_connection->open($db_connstr); $rs = $db_connection->execute("select uid,uname from users where uid = '". $_GET["user"] ."'"); header ("Content-Type: text/html; charset=tis-620"); if (!$rs->EOF) { $un = $rs->Fields(1); echo $un->value; } else { echo "ไม่พบข้อมูลนี้"; } // http://127.0.0.1/y.php?user=science } ?> |
ต.ย. 8 : โปรแกรม แสดง select ชุดใหม่ เมื่อคลิ๊ก [ajaxtest.php] |
<? if (isset($_REQUEST["t"])) { echo "<select name=my_sub>"; if ($_REQUEST["t"] == "fruit") echo "<option>apple</option><option>banana</option>"; if ($_REQUEST["t"] == "drink") echo "<option>coke</option><option>pepsi</option>"; echo "</select>"; exit; } ?><body><script type="text/javascript"> function myajax() { var xmlHttp; var xdate = new Date(); try { xmlHttp=new XMLHttpRequest(); } catch (e) { try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.getElementById("my_div").innerHTML= xmlHttp.responseText; } } xmlHttp.open("GET","?t=" + document.f.first_choice.value,true); xmlHttp.send(null); } </script> <form name="f"> <select name="first_choice" onclick="myajax();"> <option value="drink" selected>เครื่องดื่ม</option> <option value="fruit">ขนม</option> </select> <div id="my_div"></div> </form> |
ต.ย. 9 : ping google เบื้องต้นด้วย fsockopen [ping_google.php] |
โค้ดชุดนี้ แสดงการใช้ fsockopen เชื่อมต่อไปยังเครื่องเป้าหมาย แล้วตอบไปว่าผลการเชื่อมต่อเป็นอย่างไร
// http://www.thecave.info/php-ping-script-to-check-remote-server-or-website/ <?php function ping($host,$port=80,$timeout=6) { $fsock = fsockopen($host, $port, $errno, $errstr, $timeout); if ( ! $fsock ) { return FALSE; } else { return TRUE; } } $host = 'www.google.com'; $up = ping($host); if( $up ) { echo "<img src=on.jpg>"; } else { echo "<img src=off.jpg>"; } ?> |
ต.ย. 10 : ping ตาม url ปรับมาจาก ping_google.php [ping_web.htm] |
แสดงการเชื่อมต่อของ AJAX กับผลการใช้ fsockopen ซึ่งกระทำทีละ ip
<body> <script type="text/javascript"> function ping() { var xmlHttp; var u = document.f.url.value; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { try { // Internet Explorer xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support AJAX!"); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.getElementById("ping").innerHTML=xmlHttp.responseText; } } xmlHttp.open("GET","ping_web.php?url=" + u,true); xmlHttp.send(null); } </script> <form name="f"> <input name=url value="www.google.com"> <input type=button onclick="ping();" value=updating> <div id="ping"></div> </form> <a href="http://www.thaiall.com/ajax/log/ping_web.php">#</a> <a href="http://www.thaiall.com/ajax/log/ping_web.php?url=www.google.com">#</a> |
ต.ย. 10 : ping พร้อมกันได้หลาย url ปรับมาจาก ping_web.php [ping_webs.htm] |
แสดงการเชื่อมต่อของ AJAX กับผลการใช้ fsockopen ซึ่งกระทำได้หลาย ip โดยกำหนดค่าใน ping_webs.htm
ได้แนวมาจาก http://www.thecave.info/php-ping-script-to-check-remote-server-or-website/ <body> <script type="text/javascript"> function ping() { var xmlHttp; var n="www.google.com"; var u = n.concat(",www.facebook.com"); u = u.concat(",203.151.129.162"); // www.sanook.com u = u.concat(",58.137.222.118"); // www.hunsa.com try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { try { // Internet Explorer xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support AJAX!"); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.getElementById("ping").innerHTML=xmlHttp.responseText; } } xmlHttp.open("GET","ping_webs.php?url=" + u,true); xmlHttp.send(null); } </script> <form name="f"> <input type=button onclick="ping();" value="check ping"> <div id="ping"></div> </form> |
ต.ย. 11 : การใช้ ajax เรียกตัวเอง หรือเรียกแฟ้มภายนอกจาก dt.php |
<?php if(isset($_GET["test"])) die("output = " . $_GET["test"]); ?> <script type="text/javascript"> function ajaxFunction() { var xmlHttp; try { xmlHttp=new XMLHttpRequest(); } catch (e) { try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.uname.value=xmlHttp.responseText; } } /* [ readyState ] 0 UNSENT Client has been created. open() not called yet. 1 OPENED open() has been called. 2 HEADERS_RECEIVED send() has been called, and headers and status are available. 3 LOADING Downloading; responseText holds partial data. 4 DONE The operation is complete. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState // xmlHttp.open("GET","dt.php?user=" + document.myForm.user.value , true); // dt.php <?php echo date('Y/m/d H:i:s'); ?> */ xmlHttp.open("GET","?test=" + document.myForm.user.value , true); xmlHttp.send(null); } </script> <form action="" method=post name="myForm"> <input name=user size=12 onkeyup="ajaxFunction();"> <input name=uname size=25 disabled style="background-color:yellow"> <input type=submit value=action> </form> |