پی ایچ پی اور ایجاکس لیو سرس

AJAX بہتر، کمپنی، بجلی کی تجربات فراہم کرتا ہے۔

جستجوی زنده AJAX

در این مثال AJAX، ما یک جستجوی زنده را نمایش می‌دهیم.

جستجوی زنده در مقایسه با جستجوی سنتی، مزایای زیادی دارد:

  • نتایج نمایش داده می‌شوند وقتی که داده‌ها وارد می‌شوند
  • نتایج را در حالی که داده‌ها را ادامه می‌دهید، فیلتر می‌کنند
  • اگر نتایج کم باشد، حذف کاراکترها می‌تواند محدوده وسیع‌تری را به دست آورد

در فیلد زیر برای جستجوی صفحات CodeW3C.com جستجو کنید

این مثال شامل چهار عنصر است:

  • فرم HTML ساده
  • JavaScript
  • صفحه PHP
  • مستند XML

در این مثال، نتایج در یک مستند XML (links.xml) می‌باشد. برای اینکه این مثال کوچک و ساده باشد، ما فقط 8 نتیجه ارائه می‌دهیم.

فرم HTML

این صفحه HTML است. این شامل یک فرم ساده HTML، استایل CSS برای این فرم و لینک به JavaScript است:

<html>
<head>
<script src="livesearch.js"></script> 
<style type="text/css"> 
#livesearch
  { 
  margin:0px;
  width:194px; 
  }
#txt1
  { 
  margin:0px;
  } 
</style>
</head>
<body>
<form>
<input type="text" id="txt1" size="30"
onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html>

توضیح مثال - فرم HTML

همانطور که می‌بینید، صفحه HTML یک فرم ساده HTML دارد که یک فیلد متن به نام "txt1" دارد.

اینگونه است که فرم کار می‌کند:

  1. وقتی که کاربر در یک فیلد متن کلید را فشار می‌دهد و آن را رها می‌کند، یک رویداد رخ می‌دهد
  2. وقتی که یک رویداد رخ می‌دهد، یک تابع به نام showResult() اجرا می‌شود
  3. عنصر <div> به نام "livesearch" زیر فرم است. این به عنوان جایگزین برای داده‌های بازگردانده شده توسط showResult() استفاده می‌شود

JavaScript

JavaScript کد "livesearch.js" می‌باشد که با مستند HTML متصل است:

var xmlHttp
function showResult(str)
{
if (str.length==0)
 { 
 دوکومنٹ کا ایڈیوائز ("livesearch")
 innerHTML="";
 دوکومنٹ کا ایڈیوائز ("livesearch")
 style.border="0px";
 بجائی return
 }
xmlHttp=GetXmlHttpObject()
اگر xmlHttp==null
 {
 آلرٹ ("بائروزر ایندریل اسکریپٹ نہیں سپورٹ کرتا")
 بجائی return
 }
وارbl url="livesearch.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
} 
فانکشن stateChanged() 
{ 
اگر xmlHttp.readyState==4 یا xmlHttp.readyState=="complete"
 { 
 دوکومنٹ کا ایڈیوائز ("livesearch")
 اینڈرایلچیپ=xmlHttp.ریسپانزٹکست;
 دوکومنٹ کا ایڈیوائز ("livesearch")
 استایل فریم کا بوردر="1px solid #A5ACB2";
 } 
}
فانکشن GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // فائرفاکس، اوپرا 8.0+، سافری
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // انٹرنیٹ ایکسپلورر
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
بجائی return xmlHttp;
}

مثال توضیح:

GetXmlHttpObject اور پی ایچ پی اور ایجاکس درخواست میں کسی مثال کا اظہار نہیں کریگا

showResult() فانکشن

یہ فانکشن جب بھی کسی اکشاری کو فیلڈ میں لگایا جاتا ہے تو چلتی ہے

اگر فیلڈ میں کوئی ورودی نہیں ہے (str.length == 0)، تو فانکشن واپس فیلڈ کو خالی رکھتی ہے اور اور کسی بجائی کا فریم کا حذف کرتی ہے

لیکن اگر فیلڈ میں ورودی موجود ہے تو فانکشن چلتی ہے:

  1. سرور کو بھیجنے والی url (فائل نام) کا تعریف کریگا
  2. ایک ورودی جعبه کا مواد (q) url میں شامل کریگا
  3. ایک رندوم نمبر اضافا کریگا تا سرور کا کینچ کچن فایل استفاد نکرده
  4. کوئی فانکشن بجای XMLHTTP اپن می‌کنه اور اور کسی بجای stateChanged فانکشن کا کار کرنا کا اطلاع دیتا
  5. با استفاده از URL داده شده XMLHTTP را باز می‌کند
  6. درخواست HTTP به سرور ارسال می‌کند

توابع stateChanged()

هر بار که وضعیت XMLHTTP تغییر کند، این تابع اجرا می‌شود.

وقتی که وضعیت به 4 (یا "complete") تغییر کند، متن پاسخ وسیله را برای جایگزین txtHint پر می‌کند و یک حاشیه دور از آن تنظیم می‌کند.

صفحه PHP

صفحه سرور به فراخوانی توسط کد JavaScript است که فایل PHP به نام "livesearch.php" است.

"livesearch.php" 中的代码检查那个 XML 文档 "links.xml"。该文档 codew3c.com 上的一些页面的标题和 URL。

این کدها به دنبال عناوین مطابقت‌دار با رشته جستجو در فایل XML و نتایج را به صورت HTML بازمی‌گردانند:

<?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
اگر (strlen($q) > 0)
{
$hint="";
برای($i=0; $i<($x->length); $i++)
 {
 $y=$x->item($i)->getElementsByTagName('title');
 $z=$x->item($i)->getElementsByTagName('url');
 اگر ($y->item(0)->nodeType==1)
  {
  // find a link matching the search text
  اگر (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
   {
   اگر ($hint=="")
    {
    $hint="<a href='" . 
    $z->item(0)->childNodes->item(0)->nodeValue . 
    "' هدف='_blank'>" . 
    $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
    }
   else
    {
    $hint=$hint . "<br /><a href='" . 
    $z->item(0)->childNodes->item(0)->nodeValue . 
    "' هدف='_blank'>" . 
    $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
    }
   }
  }
 }
}
// اگر کوئی جاگرتا نہیں پائی گئی تو اپنائی جائیگی کا جواب 'no suggestion' مقرر کیا جائے گا
// یا صحیح اعداد کو مقرر کیا جائے گا
if ($hint == "")
 {
 $response="no suggestion";
 }
else
 {
 $response=$hint;
 }
// اپنائی جائیگی کا جواب
echo $response;
?>

مثال توضیح:

اگر JavaScript سے کوئی متن فراہم کیا گیا ہے (strlen($q) > 0)، تو:

  1. PHP کے ذریعے 'links.xml' فائل کا ایک XML DOM آٹھا
  2. تمام 'title' عناصر (nodetypes = 1) کا دورہ کیا جائے تاکہ جاگرتا جاسکے کہ JavaScript کا فراہم کردہ اعداد کا نام کتنا صحیح ہے
  3. صحیح عنوان والا لینک پائا جائے تو اس کو '$response' متغیر میں مقرر کیا جائے گا، اگر زیادہ سے زیادہ ماتچ پائے جائیں تو تمام ماتچ متغیر میں شامل کئے جائیں گے
  4. اگر کوئی ماتچ نہیں پائا تو '$response' متغیر کو 'no suggestion' مقرر کیا جائے گا
  5. $result یہ 'livesearch' مخاطب کے لئے آؤٹ پُٹ آتا ہے