موضوع : برنامه نویسی

freamwork

فریم ورک های php framework

فریم ورک چیست ؟

در نگاه اول فریم ورک به هر کتابخانه ای گفته می شود که نوشته شده باشد. اما فریم ورک چیزی بیش از یک کتابخانه است. به عنوان مثال یک شرکت سازنده خودرو در نظر بگیرید. آیا این شرکت ها هر بار برای ساختن خودرو جدید تمام نقشه ها را از از اول طراحی می کنند ؟ مطمئنا جواب منفی هست. فریم ورک ها در برنامه نویسی چنین معنی دارند. اصولا فریم ورک ها بر اساس ساختار برنامه نویسی شی گرایی تحت عنوان Model , View , Controller به اختصار MVC ساخته می شوند. اما نمی توان گفت کتابخانه هایی که بر اساس شی گرایی ساخته نشده اند فریم ورک نیستند. عموما پرتال ها و سیستم های مدیریت محتوا مثل جوملا ، مامبو ، نیوک ، وردپرس و … در نهایت تبدیل به یک کتابخانه یا فریم ورک می شوند.

چرا باید از فریم ورک استفاده کنیم ؟

هیچ اجباری برای اینکه از فریم ورک استفاده کنید وجود نداره. اگر شما یک پرتال خوب رو بدون استفاده از فریم ورک بسازید می تونه خودش یک فریم ورک یا کتابخانه خوب باشه اما دلیل بر ضعف شما در برنامه نویسی نیست. برنامه نویس ها معمولا دلایل بسیار زیادی برای استفاده یا عدم استفاده از فریم ورک دارند و معمولا بیشتر برای اثبات اینکه استفاده از فریم ورک صحیح است به مثال ” چرخ را نباید دو بار اختراع کرد ” روی می آورند که این هم غلط است. دلیلی برای اختراع دوباره چرخ وجود نداره مگر اینکه چرخ جدید چرخی بهتر از چرخ قدیم باشه. کلا می خواستم بگم که هیچ وقت از اینکه از فریم فرک استفاده نمی کنید احساس پشیمونی نکنید.

چه زمانی باید شروع به نوشتن فریم ورک کرد ؟

متاسفانه یکی از ضعف های برنامه نویس های ما این هست که به محض یادگیری زبان PHP شروع به نوشتن یک فریم ورک می کنند. البته جوان هستند و جویای نام اما ساخت یک فریم ورک از صفر وقتی شما تجربه کافی ندارید در نهایت باعث می شود که پروژه شما منحل یا بدون استفاده کننده تبدیل شود. این مورد رو من زیاد دیدم متاسفانه. زمانی می تونید به ساختن یک فریم ورک روی بی آورید که شما مهارت و دانش کافی رو داشته باشید و هیچ کدام از فریم ورک های موجود توان برآورده کردن نیاز های شما را ندارد. در این زمان به نظر من شما می تونید شروع به ساخت یک فریم ورک کنید اما همیشه این رو باید به یاد داشته باشید که بروز رسانی و گرفتن باگ ها به عهده شماست.

کدام فریم ورک را انتخاب کنیم ؟

من با فریم ورک های Codeigniter , Cakephp , ZendFramework , Symfony آشنایی دارم. عموما برنامه نویس ها از CodeIgniter و Cakephp استفاده می کنند در ایران. به نظر من اگر شما یک پروژه خیلی ساده و کوچک دارید Codeigniter انتخاب خوبی خواهد. چرا که از سرعت بالا و سادگی بالایی برخوردار است. Cakephp فریم ورک قوی با ساختار مناسب برای کار های حرفه ای می تونه باشه . اما خب من ضعف هایی در Cakephp دیدم ولی یکی از بهترین قسمت های این فریم ورک لایه Model و ORM هست و در این مورد می توان گفت بسیار خوب عمل کرده اند طوری که کار با دیتابیس برای برنامه نویس بسیار راحت شده. ZendFramework یکی از بهترین فریم ورک هاست . بخاطر اینکه مثل یک کتابخانه معمولی در کنار پروژه شما قرار می گیرد و شما قادر هستید که از تمامی قسمت ها هر طور که مایل هستید استفاده کنید و یا تغییرات لازم را بدهید. دقیقا مانند یک کتابخانه قوی و مستحکم. در نهایت به نظر بنده symfony قدرت مطلق فقط و فقط برای پروژه های حرفه ای و عظیم ساخته شده . البته این گفته تا نسخه ۱٫۴ درسته و در نسخه ۲ و تغییراتی که داده شده سرعت اینقدر بالا هست که شما در پروژه های کوچک هم می توانید به سادگی از این فریم ورک استفاده کنید. نهایتا انتخاب فریم ورک باید خیلی دقیق باشه . معمولا برنامه نویس ها نمی تونن با چندین فریم ورک هم زمان کار کنند. پس سعی کنید فریم ورکی را انتخاب کنید که بتونید همیشه استفاده کنید و کمتر دچار مشکل بشوید.

آیا فریم ورک سرعت اسکریپت را پایین می آورد ؟

بله. چون فریم ورک ها از کلاس های زیادی استفاده می کنند معمولا این مشکل وجود دارد که مقدار حافظه بیشتری مورد استفاده قرار می گیرد. اما سرعت آنچنان لامس نخواهد بود که شما بتوانید تشخیص دهید فلان اسکریپت از فریم ورک استفاده کرده یا خیر. همه چیز بستگی به ساختار فریم ورک دارد و نحوه فراخوانی کلاس ها و استفاده از Cache تاثیر بسیار بالایی در سرعت نرم افزار خواهد داشت.

باید و نبایدهای استفاده از AJAX

باید و نبایدهای استفاده از AJAX
خوبها: آژاکس. بدها: آژاکس

AJAX تکنیک جذاب و مفیدی برای مدیریت صفحات سایت هست که غیر از جذابیت، سرعت انتقال محتوا رو بالا میبره و در پهنایباند صرفهجویی میکنه.
در ادامه به نکات متفاوتی از باید و نبایدها و خوبی بدیهای آژاکس اشاره خواهد شد.

وابستگی به جاوااسکریپت: مهمترین خصیصهی آژاکس وابستگی اون به زبان و کدهای جاوااسکریپته و این زبان هم کاملا به مرورگر وابسته است و مرورگر هم به کاربر. یعنی نمیشه روش حساب صددرصد باز کرد.
باید وابستگیها رو تحلیل و کنترل کنیم. اگر بخشهای حساسی رو به آژاکس وابسته کردیم مدل غیرآژاکسی هم باید براش ایجاد کنیم. و نباید کاربر رو نادیده بگیریم و در حالتهای خاص مثل غیرفعال بودن جاوااسکریپت یا بروز خطای جاوااسکریپت، هم جوابگوی نیازهای کاربر از سایت باشیم.

بارگذاری کامل صفحات توسط جاوااسکریپت: شاید وسوسه شیم و بخوایم صفحات سایت رو کاملا با آژاکس لود کنیم. این کار مهمترین خوبیای که داره سرعت بالای انتقال محتواست اما باید بدونیم که تغییر صفحات با آژاکس این مشکلات رو هم داره:

عدم توانایی به استفاده از دکمههای Back و Forward و Bookmark مرورگر چون عملا هیچ تغییر صفحهای رخ نداده. برای حل این مشکل کدهای آمادهای وجود داره!
عدم تولید URL متناسب با صفحه. کاربر نمیتونه آدرس صفحهای که داره میبینه رو ذخیره کنه یا به کسی بده چون آدرس صفحه تغییری نکرده. دقت کن که راه حلی که در بند قبلی اشاره کردم، با اینکه آدرس رو تغییر میده اما کافی نیست. به این دلیل که سایت هم باید آماده تحلیل و پردازش آدرسهای این چنینی باشه یعنی اگر کسی URL تولید شده توسط کدهای ما رو اجرا کرد اطلاعات صحیح رو ببینه.
موتورهای جستجو که جاوااسکریپت و آژاکس ندارند. اونهای برای ایندکس کردن صفحات از صفحات عادی استفاده میکنند. محتوایی که فقط با آژاکس قابل دسترسه یعنی برای هیچ موتور جستجویی قابل دسترس نیست. برای حل این مشکل باید امکان تغییر صفحات، بدون آژاکس رو هم فراهم کنیم که کار چندان سادهای نیست.

از هم گسیختگی کدها: کاملا مشخصه که فرایند آژاکس از دو طرف انجام میشه. سمت سرور و سمت کاربر. این یعنی یک عملیات آژاکس با همکاری دو زبان برنامهنویسی صورت میگیره. مثلا جاوااسکریپت و PHP.
حالا سوال پیش میاد که عملیات چطور بین این دو زبان تقسیم شه؟ چه کارهایی رو توسط جاوااسکریپت انجام بدیم و چه کارهایی رو به سرور محول کنیم؟
مثال میزنم. میخوایم یک درخواست آژاکس بفرستیم و رکوردی رو تغییر بدیم. میتونیم با شروع عملیات همه پردازشهای ممکن رو با جاوااسکریپت انجام بدیم و یه لقمهی آماده برای سرور ارسال کنیم یا برعکس، سادهترین مدل درخواست رو ارسال کنیم و در سرور همهی بررسیها رو انجام بدیم.
نکتهی بد مسئله اینجاست که معمولا سوالاتی که در این بند مطرح کردم هیچوقت مطرح نمیشه و طراح همینجوری شروع میکنه با طراحی آژاکس و نتیجه این میشه که سر در آوردن از یک عملیات، کار وحشتناکی شده چرا که بخشی از پردازشها در سمت سرور صورت گرفته و بخشی سمت کاربر.
برای حل این مشکل باید تکلیفمون رو با خودمون و کارمون روشن کنیم و براساس یک قاعدهای رفتار کنیم. بدستگیری عملیات در سمت کاربر، سایت رو به سیستم کاربر و جاوااسکریپت وابسته میکنه و ترافیک سرور رو کمتر میکنه. در مقابل، سنگینی کار در سمت سرور، قابلیت حمل رو بیشتر میکنه، سرعت عملیات رو میتونه زیاد کنه و البته پردازشهای بیشتری رو به سرور محول میکنه. روش سوم تعریف روشی بین این دو روش هست که باید همهجا بهش پایبند باشیم یعمی مثلا کارهای خاصی رو تعریف کنیم که همیشه توسط جاوااسکریپت انجام شه و کارهایی توسط سرور.

امنیت: نکتهای که فراموش میشه. بعضیها برای آژاکس فقط پارامترهای اساسی رو ارسال میکنند و در سرور مطمئن هستند که این اطلاعات از همون کاربری که باید، رسیده. مثلا میخوان چیزی رو آپدیت کنند فقط اطلاعات اساسی رو ارسال میکنند و تغییر رو انجام میدهند در حالیکه باید و باید صحت ارسالکننده رو هم تایید کنند. حتما باید چک بشه که چه کسی این درخواست رو ارسال کرده. دسترسی داشته یا نه.

تغییر بخشهای کوچک و مهم: بهترین استفادهی آژاکس ارسالهای کوچک است. در واقع باید بگردیم و آژاکس رو فقط برای چنین نقاطی فعال کنیم. مثلا ثبت کامنت، معمولا ثبت کامنت لازم نیست محتوای کل صفحه رو مجدد بازخوانی کنه یا عملیات Rate یا تغییرات این چنینی که کاربر دوست نداره واسه حرکت اضافی زیاد معطل شه.

بهینگی: از خصوصیات پسندیدهی آژاکس سرعت بالا بخاطر عدم لود اطلاعات اضافی است. یعنی مثلا من توسط آژاکس یک کامنت ثبت میکنم. اطلاعاتی رو ارسال میکنم و محتوای یک کامنت رو از سرور میگیرم. اما وقتی بدون آژاکس چنین کاری میکنم، اطلاعات یک کامنت رو ارسال کردم ولی محتوای یک صفحهی کامل و از سرور میگیرم! حجم خیلی کمتری توسط آژاکس لود شده پس سریعتره.
حالا باید دقت کنیم که در سرور اطلاعات اضافیای ارسال نکنیم که این خصوصیت رو ار بین ببریم. مثلا گاهی به اطلاعاتی از چند نقطهی صفحه نیاز داریم و کل صفحه رو لود میکنیم و توسط جاوااسکریپت اطلاعات مورد نیاز رو ازش استخارج میکنیم. برای چنین کاری باید از XML و یا JSON استفاده کنیم و فقط اونهایی رو که لازم داریم دریافت کنیم نه چیزی بیشتر.

استفاده از کتابخانههای آژاکس: وقتی کدهای اصلی آژاکس رو نشناسیم یا با جاوااسکریپت راحت نباشیم، سراغ کتابخانههای جاوااسکریپت میریم تا از توابع آمادهی اونها استفاده کنیم. کتابخانههایی مثل MooTools یا jQuery. نکتهی مهم در استفاده از این کتابخانهها اینه که اینها حجم قابل توجهی رو به سایت اضافه میکنند و به نظر من باید ارزش این موضوع رو داشته باشند. آژاکس معمولا فقط یکی از امکانات این کتابخانههاست و قابلیتهای زیادی به همراه آنها بوجود میاد. بهتره از قابلیتهای آنها استفاده بیشتری در سایت کنیم یعنی از یک کتابخانه صرفا برای آژاکس استفاده نکنیم.

بیایم AJAX یاد بگیریم…..

آموزش مختصری برای AJAX

loading loading loading loading loading
loading

AJAX چی هست اصلا؟ آژاکـــــــس یا ای-جکــــس مخفف Asynchronous JavaScript And XML به معنی جاوااسکریپت و XML غیرهمزمان هست. به معنیش فکر نکن که چیزی دستگیرت نمیشه! بی خیال
آژاکس تکنیکی برای دریافت اطلاعات از سرور بدون بازخوانی یا Refresh صفحه است. اصولش هم به این صورته که جاوااسکریپت به سرور درخواست(Request) ارسال می کنه و نتیجه یا پاسخ(Response) سرور رو دریافت می کنه بدون این که صفحه جاری بازخوانی بشه.

توضیح بیشتر به این صورت هست که دو نوع زبان تحت وب داریم:

Server-Side (سمت سرور) : این زبانها صرفا توسط سرور اجرا میشن مثل PHP, JAVA, ASP.NET, PERL و… .
Client-Side (سمت کاربر) : این زبانها صرفا توسط کامپیوتر کاربر اجرا میشن (دقیقتر توسط مرورگر کاربر) مثل JavaScript و … .

همونجوری که واضحه، زبانهای سمت سرور از اونجایی که به سرور وابسته هستند فقط در بستر اینترنت عمل می کنند و نیاز به اتصال به اینترنت دارند ولی زبانهای سمت کاربر، در حالت آفلاین همه وظایف سمت کاربری خودشون رو بخوبی انجام میدن.

نحوه کار این تکنیک به این ترتیب هست که وقتی شما روی یک لینک معمولی کلیک می کنید، در واقع یک درخواست به سرور ارسال کردید. سرور این درخواست رو پردازش می کنه و با بازخوانی صفحه، محتویات جدید صفحه رو به شما میده. در آژاکس، جاوااسکریپت که برای اجرا به بازخوانی صفحه نیاز نداره با استفاده از Object خاصی بصورت زیر زیرکی یه درخواست به سرور ارسال می کنه و جوابش رو هم میگیره یعنی کافیه توسط جاوااسکریپت اطلاعات مناسب رو به سرور برسونید و Response سرور رو هم چاپ کنید. به همین سادگی به همین خوشمزگی!

برای فهم این آموزش اطلاعات حداقلی از جاوااسکریپت نیازهست!

کلید تسلط به هر چیزی اطلاعات کافی درباره اون موضوعه پس بهتره اول همه سوراخ سمبه های این آبجکت رو بشناسیم. منگ
این شیء در مرورگر اینترنت اکسپلورر توسط کلاس ()ActiveXObject هست و تقریبا برای سایر مرورگرها ()XMLHttpRequest، به اضافه اینکه کلاس مربوط به اینترنت اکسپلورر اطلاعات مربوط به نسخه مرورگر رو هم میگیره.

متدهای این آبجکت به شرح زیر هست:
متد توضیح
(open(Method,URL,Async,User,Pass آغاز عملیات
(send(header ارسال اطلاعات بصورت دیتا
(setRequestHeader(header,value تعیین header اطلاعات ارسالی
(getResponseHeader(header دریافت header جاری بصورت متن
()getAllResponseHeaders دریافت تمامی headerها بصورت متن
()abort اتمام فوری عملیات

و Property یا مشخصه ها هم بصورت زیر هستند:
مشخصه توضیح
onreadystatechange باعث اجرای تابع متناظر با خودش به ازای هر بار تغییر وضعیت
readyState وضعیت عملیات
responseText نتیجه عملیات بصورت Text
responseXML نتیجه عملیات بصورت XML
status پیغام سرور بصورت کد مثل ۴۰۴ (Page Not Found) یا ۲۰۰ برای موفقیت
statusText پیغام سرور بصورت متن

شروع می کنیــــــــــــــــــــــــــــــــــــــــــــم… داغون

می خوایم یه آژاکس ساده درست کنیم. برای این آموزش من از PHP استفاده کردم که برای اجرای این زبان باید از سرور روی اینترنت یا سرورهای لوکال مثل Wamp Server یا EasyPHP استفاده کنیم.

ما یه صفحه HTML مثل این داریم که میخوایم وقتی فیلد صفحه رو پر کردیم و دکمه رو زدیم، جواب آژاکس، زیر فرم چاپ شه:
کد PHP:





اسمت چیه:



ما برای ارسال درخواست آژاکس، به یه سری کد جاوااسکریپت نیاز داریم که توی فایل ajaxRequest.js قرار میدیم و توی هم فراخوانیش می کنیم. فرض می کنیم که عملیات آژاکس توسط تابع ajaxAction در فایل جاوااسکریپتمون انجام میشه که قراره با فشار دادن دکمه فرم شروع بشه پس بصورت onclick در فرم قرار دادیم.

برای بخش اصلی کار یعنی کدهای جاوااسکریپت اول باید یک نمونه (Instance) از شی آژاکس رو ایجاد کنیم. همونطور که گفتم بازم اینترنت اکسپلورر نخاله گری کرده و شیء اش با بقیه فرق می کنه در نتیجه ایجاد نمونه یکم پیچیده تر از استفاده از یک فرمان new ساده است. البته اینترنت اکسپلورر توی نسخه ۷ و بالاتر (اینجوری که یادم میاد) شیء XMLHttpRequest رو هم پشتیبانی می کنه. من برای ایجاد نمونه از کد زیر استفاده می کنم:
کد PHP:
function AjaxRequest() {
try{ var xmlhttp = new XMLHttpRequest(); }
catch(err1)
{
var ieXmlHttpVersions = new Array();
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp.7.0″;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp.6.0″;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp.5.0″;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp.4.0″;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp.3.0″;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “MSXML2.XMLHttp”;
ieXmlHttpVersions[ieXmlHttpVersions.length] = “Microsoft.XMLHttp”;

var i;
for (i=0; i < ieXmlHttpVersions.length; i++) {
try
{
var xmlhttp = new ActiveXObject(ieXmlHttpVersions[i]);
break;
}
catch (err2) { return false; }
}
}
return xmlhttp;
}
این کدها رو توی فایل ajaxRequest.js که گفته بودم بسازید، قرار بدید.

همونجوری که حتما به کدهای HTML بالا دقت کردید، زمان فشرده شدن دکمه، تابع ajaxAction اجرا میشه. ما هم این تابع رو میسازیم:
اول می خوایم مقدار فیلد موجود توی فرم رو بگیریم و شیء آژاکس رو توسط تابع AjaxRequest که بالا ساختیم ایجاد کنیم:
کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
.
.
.
}

حالا برای ارسال درخواست، باید از متد open استفاده کنیم. این متد ۵ تا پارامتر داره که دو تا اولی اجباری هستند:
پارامتر توضیح
نوع ارسال یکی از عبارات GET ، POST ، HEAD
URL ارسال آدرس فایل یا URL برای ارسال و دریافت اطلاعات
نحوه ارسال true و false برای تعیین به ترتیب، ارسال غیرهمزمان و همزمان
نام کاربری تعیین نام کاربری برای ارسال
کلمه عبور تعیین کلمه عبور برای ارسال

پس:
کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "ajaxServer.php?name=" + field, true);
.
.
.
}

همونطور که میبینید، من یه کوئری به فایل ajaxServer.php فرستادم که کلیدش name هست و مقدارش، مقدار فیلد توی صفحه. نوع ارسال هم GET مشخص شده.
اگر بجای GET از HEAD استفاده می کردم، نتیجه اطلاعات header می بود.

از لحظه درخواست تا پایان عملیات، شیء آژاکس مراحل رو دریافت می کنه و این وظیفه ماست که این مراحل رو بازیابی کنیم. xmlHttp پنج مرحله رو پشت سر میذاره و این مراحل بصورت شماره در مشخصه(Property) به نام readyState ذخیره میشه. مقادیر به این صورت هستند:
وضعیت توضیح
۰ هیچ عملیاتی صورت نگرفته
۱ اطلاعات در حال لود شدن هستند
۲ عملیات لود به اتمام رسید
۳ خاتمه دادن عملیات
۴ پایان عملیات

تغییرات غیرهمزمان در یک Property به نام onreadystatechange صورت میگیره که باید توسط یه تابع Callback، چک بشه:

کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "ajaxServer.php?name=" + field, true);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState == 0) response.innerHTML = "uninitialized";
if(xmlHttp.readyState == 1) response.innerHTML = "loading";
if(xmlHttp.readyState == 2) response.innerHTML = "loaded";
if(xmlHttp.readyState == 3) response.innerHTML = "interactive";
if(xmlHttp.readyState == 4) response.innerHTML = "complete";
}
.
.
}

نتیجه عملیات آژاکس، در مشخصه responseText ذخیره میشه (اگه متنی باشه). پس:
کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "ajaxServer.php?name=" + field, true);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";

if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
.
.
}
اگر وضعیت ۱ بود یعنی اطلاعات در حال لود هستند پس باید پیغام Loading یا از این عکسهای چرخونک چاپ شه و اگر وضعیت ۴ بود یعنی عملیات تموم شده و باید جواب چاپ بشه ولی برای اینکه از موفقیت آمیز بودن عملیات مطمئن بشیم، status رو هم چک می کنیم.

برای اتمام درخواست آژاکس باید یه متد دیگه رو هم اجرا کنیم.
متد send اگر اطلاعاتی بصورت data وجود داشته باشه رو ارسال می کنه ولی چون ما از روش GET استفاده کردیم و اطلاعات مورد نیاز رو توسط کوئری ارسال کردیم، دیگه چیز دیگه ای نداریم پس:
کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
xmlHttp.open("GET" , "ajaxServer.php?name=" + field, true);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";

if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
xmlHttp.send(null);
}
اگر نوع ارسال POST بود، ارسال اطلاعات بصورت data می تونستیم داشته باشیم. برای این کار باید درخواست رو بعنوان اطلاعات فرم کد کنیم در نتیجه یک header جدید و مناسب باید ایجاد کنیم. در این حالت:
کد PHP:
function ajaxAction() {
var field = document.getElementById("ajaxField").value;
var response = document.getElementById("ajaxResponse");
var xmlHttp = AjaxRequest();
xmlHttp.open("POST" , "ajaxServer.php", true);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState == 1)
response.innerHTML = "Loading...";

if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
response.innerHTML = xmlHttp.responseText;
}
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xmlHttp.send("hello=yes&name=" + field);
}

در حالت POST کوئری هایی که به URL اضافه میشن، در سرور GET شناخته میشن و اونهایی که به متد send داده میشن، POST درنظر گرفته میشن.

تا اینجا کدهای بخش کلاینت بخوبی ایجاد شد حالا باید اسکریپت سمت سرور رو که اینجا ajaxServer.php اسمش بود رو بسازیم. این اسکریپت در حالت GET، فقط یک متغیر با نام name بهش ارسال میشه و کافیه اون رو بگیریم و نتیجه رو توسط زبان سمت سرورمون چاپ کنیم:
کد PHP:
$name = $_GET['name'];
print "چطوری $name؟”;
چیزی که این بخش چاپ می کنه مستقیم به داخل responseText میره و جاوااسکریپت هم اون رو مدیریت و نمایش میده….
به همین سادگی بود!