شئXMLHttpRequest براي درخواست داده ازيك سرور استفاده ميشود .
براي ارسال يك درخواست به سرور از متدهايopen( ), send( ) شئ XMLHttpRequestاستفاده ميشود :
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
xhttpشئ ايجاد شده از نوعXMLHttpRequest است .
متدهاي شئ درخواست آجكس مطابق جدول زيراست:
متد | شــرح |
---|---|
open(method,url,async) | methodـ نوع درخواست GET يا POST
urlـ آدرس يوآرال anyncـ ناهمزماني(true) همزماني(false) |
send( ) | ارسال درخواست به سرور، مورد استفادهGET |
send(string) | ارسال درخواست به سرور، برايPOST |
پارامترurl در متدopen( ) آدرس يوآرال فايلي است روي محيط سرور در هاست يا هاست محلي
اين فايل مي تواند هر نوع فايلي باشد، مانندtxt وxml .يا فايل هاي اسكريپت نويسي سروري . مانندasp , php كه ميتوانند قبل از ارسال پاسخ روي سرور اقداماتي انجام دهند .
درخواست هاي سرور بايد بصورت ناهمزمان با بارگذاري بايد ارسال شوند.
پارامترasync متد open( ) بايد روي true تنظيم شود :
xhttp.open("GET", "ajax_test.asp", true);
با ارسال ناهمزمان، جاواسكريپت مجبورنيست منتظر پاسخ سرور بماند، بلكه ميتواند:
مقدار پيش فرض پارامتر ناهمزماني بصورتasync=true است . بهمين دليل براحتي ميتوانيد آنرا دركد درج نكنيد و تابعopen( ) بدون اين پارامتر باشد .
ويژگي ناهمزماني شئXMLHttpRequest بصورت async=false توصيه نمي شود، زيرا بايد جاوااسكريپث براي دريافت جواب متوقف شود .اگر دراين حالت سرور مشغول ويا كند باشد، ممكن برنامه هنگ كرده ويا متوقف گردد.
نوع ارسالGET در بيشتر موارد ، ساده تر وسريعتر از POST است.
با اين حال هميشه از درخواست هايPOST در موارد زير استفاده كنيد :
مثال ـ يك درخواست سادهGet
xhttp.open("GET", "demo_get.asp"); xhttp.send();
در مثال فوق ممكن برنامه منجر به استفاده از نتيجه كش گردد .براي اجتناب از اين اتفاق يك شناسه منحصر بفرد بهurl اضافه كنيد . اطلاعات كش ، اطلاعات بروزنمي باشد.
مثال ـ اصلاح شده بالا
xhttp.open("GET", "demo_get.asp?t=" + Math.random()); xhttp.send();
اگر ميخواهيد اطلاعات را با روشGET ارسال كنيد، اطلاعات را به URL اضافه كنيد :
مثال ـ نمونه ارسال اطلاعات با درخواستGET
xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford"); xhttp.send();
نحوي استفاده سرور از ورودي ونحوه پاسخ سرور به يك در خواست ، درفصل بعدي توضيح داده شده است.
مثال ـ يك درخواست سادهPOST
xhttp.open("POST", "demo_post.asp"); xhttp.send();
براي دادهPOST مشابه بافرمHTML يك هدرHTTP با متد setRequestHeader() اضافه نمائيد .داده هائي كه ميخواهيد در متد send()ارسال شود، در آن مشخص كنيد .
مثال ـ درخواست با ارسال نمونه داده
xhttp.open("POST", "ajax_test.asp"); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Henry&lname=Ford");
متد | شــرح |
---|---|
setRequestHeader(heaher , value) | هدرHTTP به درخواست اضافه ميكند .
headerـ نام ومقدار هدر را مشخص ميكند . |
براي اجراي يك درخواست همزمان، پارامترسوم متدopen( ) را به falseتعيير دهيد :
xhttp.open("GET", "ajax_info.txt", false);
گاهي اوقات ازasync=false براي تست سريع اسفاده ميگردد .همچنين درخواست هاي همزمان را در قديمي جاوااسكريپت خواهيد ديد.
از آنجائيكه كد منتظر تكميل سرور مي ماند، نيازي به تابعonreadystatechange نيست
مثال ـ درخواست همزمان
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
ويژگي ناهمزماني شئXMLHttpRequest بصورت async=false توصيه نمي شود، زيرا بايد جاوااسكريپث براي دريافت جواب متوقف شود .اگر دراين حالت سرور مشغول ويا كند باشد، ممكن برنامه هنگ كرده ويا متوقف گردد.
ابزارهاي توسعه دهنده هاي مدرن تشويق ميشوند در مورد استفاده از درخواست هاي همزمان هشدار دهند و ممكن است در صورت وقوع يك استثنايInvalidAccessError ايجاد كنند .