به قسمت آخر از سری آموزشی PHP 7 خوش آمدید.
تکنولوژی AJAX فقط برای کار با فایل های XML و ... نیست بلکه یکی از استفاده های آن قابلیت Live Search است. Live Search همان قابلیت پیشنهاد دادن گوگل در هنگام جست و جو است؛ مثلا زمانی که می نویسیم «چطور زندگی ....» گوگل پیشنهاداتی مانند زیر را بدون refresh شدن صفحه برایمان می آورد:
به این قابلیت Live Search می گویند و با AJAX انجام می شود. از مزایای Live Search نسبت به جست و جوهای قدیمی می توان به موارد زیر اشاره کرد:
به مثال زیر دقت کنید:
<html> <head> <script> function showResult(str) { if (str.length==0) { document.getElementById("livesearch").innerHTML=""; document.getElementById("livesearch").style.border="0px"; return; } if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (this.readyState==4 && this.status==200) { document.getElementById("livesearch").innerHTML=this.responseText; document.getElementById("livesearch").style.border="1px solid #A5ACB2"; } } xmlhttp.open("GET","livesearch.php?q="+str,true); xmlhttp.send(); } </script> </head> <body> <form> <input type="text" size="30" onkeyup="showResult(this.value)"> <div id="livesearch"></div> </form> </body> </html>
در مثال بالا رویداد onkeyup را در نظر گرفته ایم. اگر این رویداد اتفاق بیفتد تابعی به نام ()showResult
اجرا خواهد شد. از طرفی اگر در فیلد چیزی وجود نداشته باشد (str.length==0) تابع ()showResult
محتوای placeholder را خالی کرده و از تابع خارج می شود (کلمه ی return
) اما اگر محتویات آن خالی نباشد:
فایل PHP که روی سرور مسئول بررسی این درخواست است livesearch.php نام دارد. سورس کد این فایل می گوید به دنبال عناوین موجود در یک فایل XML بگرد و اگر چیزی با جست و جو همخوانی داشت آن را ارسال کن:
<?php $xmlDoc=new DOMDocument(); $xmlDoc->load("links.xml"); $x=$xmlDoc->getElementsByTagName('link'); //get the q parameter from URL $q=$_GET["q"]; //lookup all links from the xml file if length of q>0 if (strlen($q)>0) { $hint=""; for($i=0; $i<($x->length); $i++) { $y=$x->item($i)->getElementsByTagName('title'); $z=$x->item($i)->getElementsByTagName('url'); if ($y->item(0)->nodeType==1) { //find a link matching the search text if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) { if ($hint=="") { $hint="<a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" . $y->item(0)->childNodes->item(0)->nodeValue . "</a>"; } else { $hint=$hint . "<br /><a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" . $y->item(0)->childNodes->item(0)->nodeValue . "</a>"; } } } } } // Set output to "no suggestion" if no hint was found // or to the correct values if ($hint=="") { $response="no suggestion"; } else { $response=$hint; } //output the response echo $response; ?>
در این کد اگر درخواستی از سمت جاوا اسکریپت ارسال شده باشد (strlen($q) > 0) مراحل زیر انجام خواهد شد:
response$
(اگر بیشتر از یک نتیجه پیدا شد، تمام نتایج در متغیر قرار می گیرند).حتما قابلیت نظرسنجی را در سایت های مختلف دیده اید. این نظرسنجی ها بدون refresh شدن صفحه و پس از انتخاب یک گزینه توسط کاربر، نتایج را نمایش می دهند. بیایید با هم یک نظر سنجی بسازیم.
محتویات فایل HTML ما بدین صورت است:
<html> <head> <script> function getVote(int) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (this.readyState==4 && this.status==200) { document.getElementById("poll").innerHTML=this.responseText; } } xmlhttp.open("GET","poll_vote.php?vote="+int,true); xmlhttp.send(); } </script> </head> <body> <div id="poll"> <h3>Do you like PHP and AJAX so far?</h3> <form> Yes: <input type="radio" name="vote" value="0" onclick="getVote(this.value)"> <br>No: <input type="radio" name="vote" value="1" onclick="getVote(this.value)"> </form> </div> </body> </html>
در این صفحه بر اساس رویداد onclick تابعی به نام ()getVote اجرا خواهد شد. این تابع:
از طرف دیگر فایلی به نام poll_vote.php در سمت سرور مسئول پردازش این درخواست است و محتویات زیر را دارد:
<?php $vote = $_REQUEST['vote']; //get content of textfile $filename = "poll_result.txt"; $content = file($filename); //put content in array $array = explode("||", $content[0]); $yes = $array[0]; $no = $array[1]; if ($vote == 0) { $yes = $yes + 1; } if ($vote == 1) { $no = $no + 1; } //insert votes to txt file $insertvote = $yes."||".$no; $fp = fopen($filename,"w"); fputs($fp,$insertvote); fclose($fp); ?> <h2>Result:</h2> <table> <tr> <td>Yes:</td> <td> <img src="poll.gif" width='<?php echo(100*round($yes/($no+$yes),2)); ?>' height='20'> <?php echo(100*round($yes/($no+$yes),2)); ?>% </td> </tr> <tr> <td>No:</td> <td> <img src="poll.gif" width='<?php echo(100*round($no/($no+$yes),2)); ?>' height='20'> <?php echo(100*round($no/($no+$yes),2)); ?>% </td> </tr> </table>
زمانی که مقدار از سمت جاوا اسکریپت فرستاده شد:
محتویات فایل poll_result.txt به شکل زیر ذخیره می شوند:
0||0
عدد اول تعداد نظرات Yes و عدد دوم تعداد نظرات No را نشان می دهد.
نکته: به وب سرور خود اجازه دهید که به فایل های متنی دسترسی داشته باشد اما این اجازه را به هر فردی ندهید چرا که مشکلات امنیتی ایجاد می کند (فقط وب سرور کافی است).
این دوره ی آموزشی نیز به پایان رسید. در این دوره از هیچ کدام از دستورات منسوخ و قدیمی PHP استفاده نشد و اگر قابلیت جدیدی به PHP 7 اضافه شده بود برای شما توضیح داده شد. به هر حال امیدوارم از این سری آموزشی لذت برده باشید. قدم بعدی شما برای یادگیری، گذراندن دوره ی آموزشی پیشرفته PHP شیء گرا است، پیشنهاد می کنم حتما سری به این دوره بزنید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.