صفحه 1:
Web Programming Ajax Basic objects necessary Setting up the XMLHttpRequest object Making the call How the server responds Using the reply XML basics

صفحه 2:
معمولا ما یکك صفحه وب را بازمی نماییم. سپس عملیاتی شبیه تکمیل فرم» ارسال اطلاعات, ناوبری منوها و ... را انجام می دهیم. در این روش ترتیبی, ما یک صفحه را درخواست می کنیم و منتظر سرور می مانیم تا به ما جواب دهد و کل صفحه را برای ما بفرستد. یعنی هر انتقال اطلاعات بین سرور و مشتری نیازمند با گذاری یک صفحه جدید است. یکی از راههای کاهش زمان پاسخگویی سرور استفاده از 3۷356۲10۴[ در طرف مشتری است. در این حالت اطلاعات قبل از ارسال به سرور در طرف مشتری بررسی می گردند. یکی از مشکلات 356۲10۴ 3۷[این بمد. که راهی برای ارتباط مستقیم آن با سرور وجود نداشت. یکی دیکر از مشکلات دسترسی این است که در بسیاری از اوقات صفحه جدید دارای مشتر کات زیادی با صفحه قبلی است و بار گذاری دوباره آنها موجب اتلاف پهنای باند و وقت کاربر خواهد شد.

صفحه 3:
اخیرا روش مناسبی برای جایگزینی با متد بار گذار ی اانتظار اباسخ به اسم 36[ مطرح گردیده است. در آژاکس بدون اینکه فرمی ارسال شود یا صفحه جدیدی بار گذاری شود با استفاده از 3۷556۲7101[ با سرور ارتباط برقرار می گردد . آژاکس برای انجام این کار از یک شی به نام ۱۱۱۷۲۲۵۴86۵۷۵65۲ استفاده می کند. اين شئ هنوز جزء استاندارد ‎DOM (Document Object‏ ‎bol cus Model)‏ هر کدام از مرور گرها به طرق متفاوتی از آن ال ا لاا کلمه آژا کس در سال ۲۰۰۵ مطرح شد اما شی ۷۲۱۲۷۱۲۲۵۳860۵65 از سالها قبل توسط ]1 پشتیبانی می شد.

صفحه 4:
1 cutAsynchronous JavaScript and XML sl csi Ajax استفاده معمول از آژاکس بصورت زیر است: 1 2۷2507106[ ی کش 2۱10۳60/65 1یجاد میک ند و قسمتهایبختلف آنرا مقدار دهی‌میکند سپسآنرا به سرور می‌ف رسد لسکرپو صفحه حاهعآن می‌تسولنند بسعد از ایسل یهد سرور ادلمه پسیدا کسنند ۲ سرور با ارسال متن نك فایل یا خروجی ی زبان اسکرییتی سمت سرور به مشتری. جواب می دهد. ۳ وقتی جواب به مقصد رسید. یک تابع 3۷356۲1۳1[ فعال می شود تا روی داده ها ارسالی سرور عمل نماید. > این تابع معمولا صفحه نمایش را با استفاده از 001 تازه می کند و از بارگذاری دوباره صفحه جلوگیری می کند.

صفحه 5:
fin * به آن قسمت از آژاکس که در وب سرور قرار دارد ‎back end‏ گفته می شود. * اين ‎back end‏ می تواند یک فایل باشد که سرور آنرا به مشتری می فرستد و بعدا به مشتری نشان داده می شود. * يا می تواند یک ‎PHP. Perl. Ruby. Python 063 4 4° ash dob y‏ با 6 نوشته شده است. خروجی این برنامه به مرور گر مشتری فرستاده میی شود. * شی ۷۲۲0۳60065 برای ارسال اطلاعات از متدهای ‎POST 9 GET‏ استفاده می کند. (درست مثل فرمهای ۲۱۲۱/1) * متد 66۶۲ اطلاعات ارسالی را داخل 1٩لا‏ جاسازی می کند. در حالیکه متد 057 آنها را جدا گانه می فرستد. لذا ۳۵5 می تواند مقدار یشتری اطلاعات بفرستد.

صفحه 6:
* قسمت 6۳0 ۴۳۵۲۴ کاربردهای آژاکس به زبان 3۷356۲10[ نوشته می شود. * قسمت 600 026۷ درخواست را پردازش کرده و پاسخ را به مشتری بر مى گرداند. معمولا ‎back End‏ یک برنامه کوتاه است که یک کار مشخص را انجام میدهد. * همچنین نیاز است که یک تابع 3۷8561101[ نوشته شود تا پاسخ 0 8۵6 را پردازش نماید و نتایج را نشان دهد. * حرف در کلمه 232 نماینده ۱۷۱1 است. 6(۲6۳51۳016) 200۱ ‎back end ©..35 .c..f HTML 4.1 Markup Language)‏ می تواند نتیجه را بصورت 261۷11 بر کرداند. در طرف مشتری می توان با استفاده از توابع پیش ساخته موجود در 3۷356710۴[ کد 26۲۷۱ را پردازش کرد. بعلاوه قسمت 60 9361 می تواند متن ساده؛ کد 111 ويا كد 8۷556۲1۳0[ بفرستد.

صفحه 7:
شی ۱۱۱۱10860۷651 ستون فقرات متد آژا کس است. هر كاربردى بايد یک نمونه از این شی را ایجاد کند. این موضوع کاملا به نوع مرور گر وابسته است. در 59 ‎Firefox. Safari ck‏ 9 0۳6۲3 می توان يثك نمونه از این شی را به طریق زیر ایجاد نمود: <script type="text/javascript”> ajaxRequest = new XMLHttpRequest(); </script>

صفحه 8:
fin اما مرور گر ]1 این شی را توسط تکنولوژی ۸11۷62 پشتیبانی می کند. لذا نحوه ایجاد شی متفاوت است و حتی به نسخه مرور گر نیز ارتباط دارد. برای اینکه مشکل تفاوت مرور گرها را حل کنیم ما از دستور زیر استفاده می کنیم: ۲۲۷ ) . . . ( 6۵160 )6۲۳۵۲( 1 دستور ۲۷ سعی می کند یک کد 3۷3571۳[ را اجرا کند. اگر در حين اجرا خطایی رخ دهد قبل از اينكه خطا موجب سقوط 6۲1۳0 3۷85[ شود قسمت 2۵0 دخالت می نماید. برای ایجاد شی 0۱۱۷0860۵65۲ ما از دنباله ای از دستورات ۲۲۷۰۰۰ ‎catch‏ استفاده می نماییم و راه های مختلف ابجاد شی ۱۱۱۲۲۷۲۲0۴60۷۵5۲ را امتحان می کنیم.

صفحه 9:
function getXMLHttpRequest() /* This function attempts to get an Ajax request object by trying a few different methods for different browsers. */ 1 var request, err; try { request = new XMLHttpRequest(); | // Firefox, Safari, Opera, etc. 1 catch(err) { try { //_ first attempt for Internet Explorer request = new ActiveXObject ("MSXML2.XMLHttp.6.0") ; + catch (err) { try { //_ second attempt for Internet Explorer request = new ActivexObject (“MSXML2.XMLHttp.3.0"); } catch (err) { request = false; // oops, can’t create one! + 1 + return request; i اگر تابع فوق مقدار ۴3۵156 بر نگرداند فر آیند ایجاد شی ‎XMLHttpRequest‏ با موفقیت. انجام شده است. 1

صفحه 10:
* شی شامل متدها و خواص متعددی است. * لیستی از مهمترین خواص و متدهای این شی در صفحه بعد آورده شده است. * ایده اصلی این است که بعد از ایجاد شی خواص آن تنظیم می گردند. این خواص شامل نحوه ارسال اطلاعات به سرور و نحوه پردازش جواب سرور است. بعضی از خواص شی توسط سرور تنظیم می شوند و وضعیت جواب سرور را مشخص کنند.

صفحه 11:
1 Property Description readyState An integer from @. . .4. (@ means the call is uninitialized, 4 means that the call is complete. ) onreadystatechange Determines the function called when the objects readyState changes. responseText Data returned from the server as a text string (read-only). responseXML Data returned from the server as an XML document object (read-only). status HTTP status code returned by the server statusText HTTP status phrase returned by the server از روی ۲۵۵0۷51316 می فهمیم که آیا درخواست. جواب داده شده است يا نه؟سپس با چکت کردن 518105 وضعیت جواب را بررسی می کنیم.

صفحه 12:
1 Method open(‘method’, ‘URL’, asyn) Specifies the HTTP method to be used (GET or POST as a string, the target URL, and whether or not the request should be handled asynchronously (asyn should be true or false, if omitted, true is assumed). send(content) Sends the data for a POST request and starts the request, if GET is used you should call send(null). setRequestHeader(‘x’,‘y’) Sets a parameter and value pair x=y and assigns it to the header to be sent with the request. getAllResponseHeaders () Returns all headers as a string. getResponseHeader (x) Returns header x as a string. abort() Stops the current operation. متد 06 برای تنظیم درخواست استفاده می گردد. متد 56100 نیز برای ارسال اطلاعات استفاده می شود.

صفحه 13:
۳ ۱/۵ include the getXMLHttpRequest function defined before var ajaxRequest = getXMLHttpRequest(); if (ajaxRequest) { // if the object was created successfully ajaxRequest.onreadystatechange = ajaxResponse; ajaxRequest.open(“GET”, “search.php?query=Bob”) ajaxRequest.send(null); 1 function ajaxResponse() //This gets called when the readyState changes { if (ajaxRequest.readyState != 4) // check to see if we're done { return; } else { if (ajaxRequest.status == 200) // check to see if successful { // process server data here. . . } else { alert(“Request failed: “ + ajaxRequest.statusText) 2 2 } </script>

صفحه 14:
این مثال از کتاب ‎Ajax in 10 Minutes by Phil‏ 0 برداشته شده است. در اين مثال ما زمان سرور را می گیریم و آنرا نمایش می دهیم. یکث د کمه نیز برای تازه کردن زمان تعبیه شده است). در این مثال نشان می دهیم چکونه آژا کس بدون اینکه کل صفحه را بار گذاری کند آنرا تغییر می دهد. در طرف سرور از یک برنامه خیلی کوچک ۳۲۸۴ که زمان را بر می گرداند استفاده می کنیم. این برنامه را به اسم 161161۳06۰۳0 ذخیره می کنیم: ‎<?php‏ echo date(‘H:i:s'); ?>

صفحه 15:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN" | ‏+ع 5 - 11/010111 خط /يق؟‎ .00"< http: //www.w3.org/1999/xhtml" xml:Lang="en" Lang="en"> <head> <title>Ajax Demonstration</title> <style> body { background-color: #CCCcCC; text-align: cente: } -displaybox { margin: auto; width: 150px background-color: #FFFFFF: border: 2px solid #000000; padding: 10px; font: 1.5em normal verdana, helvetica, arial, sans-serif; 1 </style> <script type="text/javascript"> var ajaxRequest; function getXMLHttpRequest() /* This function attenpts to get an Ajax request object by trying a few different methods for different browsers. */ { 1 // same code as before

صفحه 16:
function ajaxResponse() //This gets called when the readyState changes. if (ajaxRequest.readyState != 4) // check to see if we're done { return; } else { if (ajaxRequest.status = { ) // check to see if successful 2 docunent .getELementById(""showtime") .innerHTHL = ‘ajaxRequest.responseText; } else { alert("Request failed: “ + ajaxRequest.statusText); function getServerTime() // The main JavaScript for calling the update. 1 ajaxRequest = getXHLNttpRequest(); if (lajaxRequest) _{ docunent .getElenentById("'showtime").innerHTML = "Request error! return 1 var myURL = “teLLtine. ph var _myRand = parseInt (Math. random()*999999999999999) myURL = myURL + “?rand=" + myRand; ajaxRequest.onreadystatechange = ajaxResponse; ajaxRequest-open("GET", myURL); ajaxRequest -send(null); 1 </script> </head>

صفحه 17:
<body onLoad="getServerTime() ;"> <hl>Ajax Demonstration</hi> <h2>Getting the server time without refreshing the page</h2> <form <input type="button" value="Get Server Time" onClicl </form> <div id="showtime” class=" "getServerTime( displaybox"'></div> </body> </html> ‏شی ۷۱۱۱۱۱۲۸0۴60۳0۵5 را ایجاد و تنظیم می کند و آنرا به‎ 096۳56۳۷۵۳۲3۳۵ wl waded ‏سرور می‎ ‏جواب سرور را نمایش می دهد.‎ ajaxResponse wl view the output page

صفحه 18:
fin * ممکن است که مرو ر گر بجای ارسال اطلاعات به سرور از 63106 خودش استفاده کند. * برای جل وگیری از این موضوع. ما یک عدد تصادفی به درخواست اضافه میی کنیم تا مرور گر فکر کند که این یک درخواست تازه است و از ‎CACHES‏ ‏استفاده نکند. * این موضوع فقط هنگام استفاده از متد 622 خودش را نشان می دهد و به نظر می رسد عمده تقصیر نیز متوجه 16 است.

صفحه 19:
پاسخ سرور که در خاصیت. ۰۳6500056766 ۱۱۱20860065۴ ذخیره شده است می تس ریت مثلا می توان به عنوان متن ساده. کد ۲1۲01 يا كد ‎ilo Fy XML‏ حتی سرور می تواند کد 3۷3571۳0۴[ نیز به ما ب رگرداند. در این حالت می توان با استفاده از متد 6۷1() کد را اجرا کرد. أما در هر صورت خاصيت. 16500056764 از نوع فقط خواندنی است. لذا قبل از ه رگونه ايد يك نمونه از آنرا ذخیره نمود. (Change the PHP script to insert HTML tags.) Example with HTML tag . (As above-change-the-PHP script.) Example using a table i id

صفحه 20:
Here’s the script with a simple HTML tag in it. <?php. ‘echo. “<span style="color 3 و اعلا )مهمه د حرف The output with a table. مامت ‎ste =‏ Stable = ‘<table style="borde Str. gtd. date(*j HY

صفحه 21:
‎4c: XML( eXtensible Markup Language) ;!‏ مختلفی استفاده می گردد. استفاده ما از 71/11 براى ارسال ذاده ساختار یافته است. ‏1 و ۲۱۲1/1 دارلیم شلبهتها وف راولنی‌هتند. چوزهر دو بر پسایه ‎SGML, (Standard Generalized Markup‏ ‎ty» Language)‏ نهاده شدداند. ‎Sgt SDL Labo argh utr Hf x XML ‏لما بسرچسبهای] 260/1 می‌تولنند تسوسط کایبر و بسه میلو تعریفو‎ ‏لستفاشه شسوندد‎

صفحه 22:
fin یک مثال: <library> <book> <title>Programming PHP</title> <author>Rasmus Lerdorf</author> <author>Kevin Tatroe</author> <author>Peter MacIntyre</author> <chapter number=“1">Introduction to PHP</chapter> <chapter number: Language Basics</chapter> <pages>521</pages> </book> </library>

صفحه 23:
برای استفاده از یک سند 261۷1 در 3۷356۳10[ باید یک شی ایجاد کنید که آنرا نگهداری کند. مرو رگر های غیر مایکروسافت: ‎<script>‏ ‎var myXMLDoc = document. implementation. createDocument (“”,”", null);‏ ‎myXMLDoc. Load(“‘mydoc. xml”) ;‏ ‎other code here‏ // ‎</script>‏ ‏مرورگر ۱۴ ‎<script>‏ ‎var myXMLDoc new ActiveXObject (“Microsoft .XMLDOM”) ;‏ ‎myXMLDoc. async=“false”;‏ ‎myXMLDoc. load (“mydoc. xml”) ;‏ ‎other code here‏ // ‎</script>‏ بعد از ایجاد این شی می توان از متدهای 3۷3511۳[ برای بررسی و استخراج داده های آن استفاده کرد.

صفحه 24:
* کد ۳۳۱۳ را طوری تغییر می دهیم که یک سند 261۷1 به مرور کر باز کرداند: ‎<?php‏ ‎header('Content-Type: text/xml");‏ ‎ech xml versic " 2>\1‏ ‎echo “<clock><timenow>" . date('H:i:s') . "</timenow></clock>";‏ I> * بعد ازاين تغيير, ما بايد تابع 232731865101256 را دستكارى كنيم تا بتواند کد ]267۷1 دریافتی را تجزیه و تحلیل نماید. (کد در اسلاید بعد) * دقته كنيد لازم نيست كه بصورت صريح يك سند 2111 ايجاد نمایید چون خاصیت ۲۵5۳0۳5۵26۳۷1۲ از شی 260۳۲۳۱۲۲۵۳۵0۷65 یکت شی 26101 مناسب است.

صفحه 25:
1 function ajaxResponse() //This gets called when the readyState changes. 4 if (ajaxRequest.readyState != 4) // check to see if we're done { return; } else { if (ajaxRequest.status == 200) // check to see if successful { var timeValue = ajaxRequest. responseXML. getELementsByTagName("timenow") [0]; document. getELementById("showtime") .innerHTML = timeValue.childNodes[0].nodeValue; } else { alert("Request failed: " + ajaxRequest.statusText); + } } این تابع از یک متد 3۷3561101[ برای دسترسی به 1011/1 2601۲ استفاده می کند.

صفحه 26:
fin * معمولا وقتی که یک فرم را پر می کنیم» فرم را به سرور می فرستیم تا آنرا بررسی نماید و نتیجه را به ما بر گرداند. در این مثال می خواهیم که حالتی را در نطر بگيريم که هنگام وارد کردن داده در فرم یک نتیجه موقت از سرور بگيریم. این مثال از کتاب 24 1۳8 2۷356۲10۲[ 5 نوشته ۱۷/۵۳۷۲ 16۱861 برداشته شده است. * فرض كنيد كه نتيجه بر گشتی لیستی از اسامی باشد که در یک آرایه ذخیره شده اند. به محض تایپ یک حرف در فیلد؛ كلمه تايب شده با لیست تطبیق داده می شود و مطابقت های جزئی بر گردانده می شوند. * در ادامه این مثال را با پایگاه داده نیز حل می کنیم.

صفحه 27:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" “http://www. w3.org/TR/xhtmL11/0TO/xhtml1-strict dtd"> <html. xmlns="http: //www.w3.0rg/1999/xhtml" xml:lang="en" Lang="en"> <head> <title>Ajax Demonstration</title> <style> </style> <script> // The JavaScript front end will be in here. </script> <body> <hi>Ajax Demonstration of Live Search</ni> <p> Search for: <input type="text" id="searchstring" /> results"> "List"> <lioResults will be displayed here.</li> </> </div> fext/javascript"> // This sets up the event handler to start the 7 search function. // var obj=document .getELementById("searchstring” // obj -onkeydown = startSearch; </script> </body> </html> <script typi

صفحه 28:
<?php header ("Content-Ty| ۳9 e = array( john Wayne”, “John Carpenter", “Elizabeth Shue", ou Costello", "Bud Abbott", "Albert Einstein", "Rich Hall", Jichelle Rodriguez", “Carmen Miranda”, Moe Howard", “Ulysses S. Grant", “Stephen Fry", "Kurt Vonnegut", “Yosemite Sam", “Ed Norton", "George Armstrong Custer", "Alice Kramden", “Evangeline Lilly", Harlan’ Ellison") ; if(!$query) $query = $ GET['query']; echo “<?xml version=\"1.0\"7>\n echo “<names>\n"; while (List($k,$v) = each ($people)) { if (stristr ($v, $query)) echo "<name>$v</name>\n"; 1 echo ‘</names>'; > این که یکت برس وجو را هى كيرد و آثرا با آرايه مها مطابقت مى دهد. سبس تامهاى مطابقت يافته را پصورت یکت ‎ML‏ ‏برمی گر3اند.

صفحه 29:
در طرف 3۷55۲7101[ ما با استفاده از خاصیت 0۳۵۱0۷۷۲ یکت تابع را صدا می زنیم. این تابع یک زمان سنج را روشن می کند و بعد از 5 تقابع »13۷۰562۳ را صدا می زند. var t; // public variable for the timeout function startSearch() { if (t) window.clearTimeout(t) ; t = window.setTimeout ("“LliveSearch()",200) ; 1 تابع مء,دء5ء11 همان ‎Sley! 15 XMLHttpRequest (28 bo AF Cun! ole‏ 9 تنظیم می کنیم و کد ۳۳۱۳ را صدا می زنیم.

صفحه 30:
function liveSearch() 4 ajaxRequest = getXMLHttpRequest(); if (!ajaxRequest) alert("Request error! var myURL = "search. php"; var query = document. getElementById("searchstring") .value; myURL = myURL + "2query=" + query; ajaxRequest .onreadystatechange = ajaxResponse; ajaxRequest .open("GET", myURL); ajaxRequest send (null); 7 function ajaxResponse() //This gets called when the readyState changes. 1 if (ajaxRequest.readyState != 4) // check to see if we're done { return; else { if (ajaxRequest.status == 200) // check to see if successful { displaySearchResults(); } else { alert("Request failed: " + ajaxRequest.statusText); 7

صفحه 31:
۱ ‏دغ انعم ماع موكرمام معتل‎ )( // This function will display the search results, and is the 7/ callback function for the Ajax request. { var i, n, Ui, t; var ul = document.getElementById("List"); var div = document. getElementById(""results"); div.removeChild(ul); // delete the old search results ul = document.createElement("UL"); // create a new list container ul.id="List"; st object jaxRequest . responseXML..getElenentsByTagName(“name") ; // get the results from the search req var name: for (i = 0; 4 < names. length; it+) 1 14 jocument.createElenent ("LI"); // create a new list elenent names [i]. firstChild.nodevalue; +t = docunent.createTextNode(n) ; مم 1 uL-appendchitd(Li) 1 if (names.length == 6) { // if no results are found, say so i = document .createElement("LI"); ۱۳ ‏كع اهعم 016") عله لكيه ممعم‎ ."(( uL-appendchitd(1i); 0 div.appendchild(ul); // display the new list View the output 1 page

صفحه 32:
در مثال قبلى بجاى ذخيره نامها در نكث آرایه می توانيیآنها را در یک پایگاه داده ذخیره ‎sled‏ نیازی به تغيير كد هرتخد 001 ‎SS APES Sune‏ ره ~ 12 | ‎versions\"1.0\"7>\0";‏ اهر مه ‏و ‎ ‎ ‎4) ‏سنوی (رمعنوو۱‎ = strtoupper(s_GETI ‘query'] ‎ittsquery ۱ ‏ل“‎ ‎4 ‎ ‎include _once(‘db_access.php"): Sconnection = mySqlconect (Sab host, §db_usernane, Sab_password); Ef tseonnection) ‎exit(*Could not connect to the database: <br/>". htalspeciatchars(mysal_error)): ‎> ‎saysal_select_db(Sdb_ database): ‎ ‎sselect = “SELECT Scolunn = "nase ‎ ‎ ‎Strom = “FRoH Stables = "people Svhere = "WHERE =; ‎ ‎Scondition = “upper(nane) LIKE ‏معدو"‎ ‎$S0L_query = hemlentities(sselect . scolum . from . stables . Suhere . condition); Sresalt = mysql_query ($s0L query); ‎se (rou = apt fetch Foi Sreute) ‎‘echo “enane>" . $row(0] . “</nane>\n": ‎aysal_close( connection); ‎view the output‏ زورب" ماو ‎page‏ ‎

صفحه 33:
۰ _کد 3۷35610۴[ در بعضی از مرورگرها اجرا نمی شود یا کاربر اجرای آنرا خاموش کرده است- * بعضى از متدها و خواص آژاکس در تمام مرو رکرها وجود ندارد با بطور متفاوتی عمل می کند. لذا کد خود را با تمام مرور گرهای متداول امتحان کنید. * اگر می توانید به نحوی کاربر را از تغیبر قسمتی از صفحه آگاه نمایید. * عناصر پنهانی که توسط آژاکس ایجاد یا آشکار می شوند در موتورهای جستجو ایند کس نمی شوند. * اجازه ندهید آژاکس جای محتوای اصلی را بگیرد و فقط در قسمتهای مورد نیاز ار آن استفاده کنید.

جهت مطالعه ادامه متن، فایل را دریافت نمایید.
34,000 تومان