سلام و عرض ادب خدمت دوستان عزیز.در این جلسه قصد داریم به مبحث Ajax در جاوا اسکریپت بپردازیم.همراه ما باشید.
Ajax چیست؟
Ajax مخفف Asynchronous Javascript And Xml است.Ajax فقط وسیله ای برای بارگذاری داده ها از سرور و به روز رسانی بخش هایی از یک صفحه وب بدون بارگیری مجدد کل صفحه است.
اساسا، کاری که Ajax انجام می دهد. استفاده از شی XMLHttpRequest (XHR) داخلی مرورگر برای ارسال و دریافت اطلاعات به یک وب سرور به صورت ناهمزمانمی باشد. که در پس زمینه، بدون مسدود کردن صفحه یا تداخل با تجربه کاربر صورت میگیرد.
Ajax به قدری محبوب شده است که به سختی برنامه ای را پیدا می کنید که از Ajax استفاده نکند هر چند کم.نمونهای از برخی از برنامههای آنلاین در مقیاس بزرگ که توسط Ajax هدایت میشوند عبارتند از: Gmail، Google Maps، Google Docs، YouTube، Facebook، Flickr و بسیاری از برنامههای کاربردی دیگر.
توجه: Ajax یک فناوری جدید نیست، در واقع، Ajax حتی واقعاً یک فناوری نیست. Ajax فقط یک اصطلاح برای توصیف فرآیند تبادل داده ها از یک وب سرور به صورت ناهمزمان از طریق جاوا اسکریپت، بدون ترفرش کردن دوباره صفحه است.
نکته: عبارت X (یعنی XML) در AJAX اشتباه نگیرید. فقط دلایل تاریخی وجود دارد. سایر فرمت های تبادل داده مانند JSON، HTML یا متن ساده را می توان به جای XML استفاده کرد.
آشنایی با نحوه عملکرد Ajax (ایجکس)
برای انجام ارتباط Ajax، جاوا اسکریپت از یک شیء ویژه تعبیه شده در مرورگر استفاده می کند. یک شی XMLHttpRequest (XHR) برای ایجاد درخواست های HTTP به سرور و دریافت داده ها در پاسخ.
همه مرورگرهای مدرن (Chrome، Firefox، IE7+، Safari، Opera) از شی XMLHttpRequest پشتیبانی می کنند.
تصاویر زیر نحوه عملکرد ارتباط Ajax را نشان می دهد:
از آنجایی که درخواستهای Ajax معمولا ناهمزمان هستند، اجرای اسکریپت به محض ارسال درخواست Ajax ادامه مییابد، یعنی مرورگر اجرای اسکریپت را متوقف نمیکند تا زمانی که پاسخ سرور بازگردد.
در بخش زیر به تک تک مراحل مربوط به این فرآیند را مورد بحث قرار خواهیم داد:
ارسال درخواست و بازیابی پاسخ
قبل از اینکه ارتباط Ajax بین کلاینت و سرور را انجام دهید، اولین کاری که باید انجام دهید این است که یک شی XMLHttpRequest را تعریف کنید، همانطور که در زیر نشان داده شده است:
1 |
var request = new XMLHttpRequest(); |
اکنون، مرحله بعدی در ارسال درخواست به سرور، نمونه سازی شی درخواست جدید ایجاد شده با استفاده از متد ()open شی XMLHttpRequest است.
متد ()open معمولاً دو پارامتر را می پذیرد – روش درخواست HTTP برای استفاده، مانند “GET”، “POST” و …، و URL برای ارسال درخواست، مانند این:
1 2 3 |
request.open("GET", "info.txt"); -Or- request.open("POST", "add-user.php"); |
نکته: فایل میتواند از هر نوع باشد، مانند txt یا xml. یا فایلهای اسکریپتی سمت سرور، مانند .php یا asp. که میتواند برخی از اقدامات را در سرور انجام دهند (مثلاً درج یا خواندن دادهها از پایگاه داده) قبل از ارسال پاسخ به مشتری.
و در نهایت با استفاده از متد ()send شی XMLHttpRequest درخواست را به سرور ارسال کنید.
1 2 3 |
request.send(); -Or- request.send(body); |
body
اختیاری را می پذیرد که به ما امکان می دهد بدنه درخواست را مشخص کنیم. این در درجه اول برای درخواستهای HTTP POST استفاده میشود، از انجا که درخواست HTTP GET بدنه درخواستی ندارد، فقط درخواست هدر ها میباشد.متدGET معمولاً برای ارسال مقدار کمی داده به سرور استفاده می شود. در حالی که از متدPOST برای ارسال حجم زیادی از داده ها مانند داده های فرم استفاده می شود.
برای متد GET داده ها به عنوان پارامتر URL ارسال می شوند.اما در روش POST داده ها به عنوان بخشی از بدنه درخواست HTTP به سرور ارسال می شود.داده های ارسال شده از طریق روش POST در URL قابل مشاهده نخواهد بود.
اجرای درخواست Ajax GET
درخواست GET معمولاً برای دریافت یا بازیابی نوعی از اطلاعات از سرور استفاده می شود که نیازی به دستکاری یا تغییر در پایگاه داده ندارد، به عنوان مثال، واکشی نتایج جستجو بر اساس یک عبارت، واکشی جزئیات کاربر بر اساس شناسه یا نام آنها، و … .
مثال زیر نحوه ایجاد درخواست Ajax GET در جاوا اسکریپت را به شما نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JavaScript Ajax GET Demo</title> <script> function displayFullName() { // Creating the XMLHttpRequest object var request = new XMLHttpRequest(); // Instantiating the request object request.open("GET", "/examples/php/greet.php?fname=John&lname=Clark"); // Defining event listener for readystatechange event request.onreadystatechange = function() { // Check if the request is compete and was successful if(this.readyState === 4 && this.status === 200) { // Inserting the response from server into an HTML element document.getElementById("result").innerHTML = this.responseText; } }; // Sending the request to the server request.send(); } </script> </head> <body> <div id="result"> <p>Content of the result DIV box will be replaced by the server response</p> </div> <button type="button" onclick="displayFullName()">Display Full Name</button> </body> </html> |
پراپرتی status کد عددی وضعیت HTTP پاسخ XMLHttpRequest را برمی گرداند. برخی از کدهای رایج وضعیت HTTP در زیر فهرست شده اند:
- 200 — OK : سرور با موفقیت این درخواست را پردازش کرد.
- 404 — Not Found : سرور نمی تواند صفحه درخواستی را پیدا کند.
- 503 — Service Unavailable: سرور به طور موقت در دسترس نیست.
در اینجا کدی از فایل “greet.php” ما آمده است که به سادگی نام کامل یک شخص را با پیوستن نام و نام خانوادگی آنها ایجاد می کند و یک پیام تبریک ارسال می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if(isset($_GET["fname"]) && isset($_GET["lname"])) { $fname = htmlspecialchars($_GET["fname"]); $lname = htmlspecialchars($_GET["lname"]); // Creating full name by joining first and last name $fullname = $fname . " " . $lname; // Displaying a welcome message echo "Hello, $fullname! Welcome to our website."; } else { echo "Hi there! Welcome to our website."; } ?> |
انجام درخواست Ajax POST
متد POST عمدتاً برای ارسال داده های فرم به وب سرور استفاده می شود.
مثال زیر به شما نشان می دهد که چگونه داده های فرم را با استفاده از Ajax به سرور ارسال کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JavaScript Ajax POST Demo</title> <script> function postComment() { // Creating the XMLHttpRequest object var request = new XMLHttpRequest(); // Instantiating the request object request.open("POST", "/examples/php/confirmation.php"); // Defining event listener for readystatechange event request.onreadystatechange = function() { // Check if the request is compete and was successful if(this.readyState === 4 && this.status === 200) { // Inserting the response from server into an HTML element document.getElementById("result").innerHTML = this.responseText; } }; // Retrieving the form data var myForm = document.getElementById("myForm"); var formData = new FormData(myForm); // Sending the request to the server request.send(formData); } </script> </head> <body> <form id="myForm"> <label>Name:</label> <div><input type="text" name="name"></div> <br> <label>Comment:</label> <div><textarea name="comment"></textarea></div> <p><button type="button" onclick="postComment()">Post Comment</button></p> </form> <div id="result"> <p>Content of the result DIV box will be replaced by the server response</p> </div> </body> </html> |
اگر از شی FormData برای ارسال دادههای فرم استفاده نمیکنید، برای مثال، اگر دادههای فرم را در قالب رشته query به سرور ارسال میکنید، به عنوان مثال: request.send(key1=value1&key2=value2) باید به طور صریح هدر درخواست را با استفاده از متد ()setRequestHeader تنظیم کنید. مثل:
1 |
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
برخی از هدرهای درخواست عبارتند از:
application/x-www-form-urlencoded
, multipart/form-data
, application/json
, application/xml
, text/plain
, text/html
,
در اینجا کد فایل “confirmation.php” ما است که به سادگی مقادیر ارسال شده توسط کاربر را خروجی می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php if($_SERVER["REQUEST_METHOD"] == "POST") { $name = htmlspecialchars(trim($_POST["name"])); $comment = htmlspecialchars(trim($_POST["comment"])); // Check if form fields values are empty if(!empty($name) && !empty($comment)) { echo "<p>Hi, <b>$name</b>. Your comment has been received successfully.<p>"; echo "<p>Here's the comment that you've entered: <b>$comment</b></p>"; } else { echo "<p>Please fill all the fields in the form!</p>"; } } else { echo "<p>Something went wrong. Please try again.</p>"; } ?> |
با این حال، می توانید تصاویر، شیوه نامه ها، فایل های JS و سایر منابع را از هر دامنه بارگیری کنید.
نکته: روش های jQuery Ajax را برای اجرای سریع و بدون درز Ajax بررسی کنید. چارچوب jQuery روش های بسیار مناسبی را برای پیاده سازی عملکرد Ajax ارائه می دهد.
سایر مقالات:
اعتبار سنجی فرم ها در جاوا اسکریپت
دیدگاهتان را بنویسید