RightClick

امروز 29 اسفند 1388 7:35

همه زمانها UTC + 3:30 ساعت هستند




ارسال مبحث جديد پاسخ به مبحث [ 10 پست ] 
نويسندهپيغام
 موضوع پست: Ajax چیست؟
پستارسال شده در: 16 بهمن 1385 9:10 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 29 تير 1384 20:03
پست ها : 991
محل سکونت: شيراز
دريافتي: 14 تشكر
رسيده: 32 تشكر
سلام دوستان،
همون طوري که قبلا گفته بودم امروز مي خوام در مورد Ajax و متد هاي اون يه خورده بحث کنم...

اول اين که ببينيم اصلا کلمه Ajax از کجا اومده ...
Ajax مخفف عبارت Asynchronous JavaScript and XML است به معني ادغام نامتقارن JavaScript و XML ...

XML چيه؟ eXtensible Markup Language در واقع زبان داده هاست ... براي انتقال داده از Application هاي مختلف با سيستم عامل ها و سخت افزار هاي مختلف هست يعني مثلا با يه برنامه کاربردي تحت ويندوز که با دلفي نوشته شده بتونيم به اطلاعات ديتابيس MySql که روي Linux کار ميکنه دست يابي پيدا کنيم... خوب ديگه خيلي از بحث منحرف نشيم
:wink:

JavaScript هم که ديگه بايد براتون آشنا باشه يه زبون برنامه نويسي سمت Client که Syntax ي شبيه به ++C داره...

Ajax مثل لامپ يک تکنولوژي جديد نيست (يک ايده توپ است) اما اين تمايل وجود داره که اون رو جزء دسته اي از تنولوژي ها قرار بديم.

Ajax به ما اين امکان رو ميده که برنامه هاي تحت وبي بسازيم که کاربر فک کنه همه چيز روي کامپيوتر خودش داره رخ ميده مثل برنامه هاي کاربردي تحت ويندوز ...

Jesse James Garrett کسي بود که براي اولين بار ايده Ajax به ذهنش رسيد درحدود 1999 اما چرا تا به حال در مورد اون چيزي نگفته ؟؟!!!
Garrett مورد نکوهش هايي قرار گرفت ... ما کاري به اين چيزا نداريم...

مقايسه برنامه نويسي کلاسيک و Ajax:
در برنامه نويسي کلاسيک اعمال ارسال و دريافت را مرورگر انجام ميدهد ... يعني کاربر با کليک کردن روي لينک ها يا نوشتن آدرس در آدرس بار و ارسال فرم ها در واقع به مرورگر درخواست ميدهد و سرور بايد به ازاي هر درخواست کاربر صفحه اي را بسازد و براي او ارسال نمايد... اما در Ajax ارسال و دريافت ها به دست خود برنامه نويس هست و ما به عنوان برنامه نويس وب مي تونيم بر اساس حرکات و رفتار کاربر يا هر جور که مايل باشيم ارسال و دريافت را انجام دهيم مثل يک برنامه کاربردي تحت ويندوز ...

در شيوه کلاسيک وقتي که Client در حال کار کردن است سرور بيکار است و بلعکس وقتي که اطلاعات در سرور در حال پردازش است Client بايستي منتظر بماند...
اما در Ajax ما ميتوانيم چندين درخواست همزمان بفرستيم و يا کارهاي ديگري لنجام دهيم به صورتي که نه سرور بيکار باشد و نه کلاينت در واقع مفهوم نامتقارن بودن اينجا ديده مي شود.

چرا Ajax مفيده؟
گوگل در اين زمينه راهنمايي هاي مفيدي ارائه داده و يه جورايي Ajax رو براي خودش با ظهور Gmail سلطنتي کرده.
1- استفاده web Application ها رو زياد تر ميکنه.
2- در Bandwidth به صورت چشمگيري صرفه جويي ميکنه.
3- فقط داده هاي مورد نياز ارسال و دريافت ميشوند.
4- در اکثر مواقع interfaces سريعتري داره.

معايب Ajax
1- دکمه Back - Forward -Stop , ... رو نداريم (البته در روش پيشرفته Ajax که در ادامه بحث ميکنيم.)
2- در موقع درخواست و دريافت در Status bar هيچ پيغامي نمايش داده نميشود.
3- چون ارسال و دريافت دست خود ما است ممکنه برخلاف تدابير امنيتي مرورگر رفتار شود.
4- اجراي کدهاي JavaSCript بر روي CPU هاي قديمي ممکنه هزينه بر باشه.
5- به Domain هاي ديگر دسترسي نيست.
6- ممکنه JavaScript روي مرورگر کاربر غير فعال باشه.
7- Debug کردن اون واقعا کار طاقت فرسايي است.(اينو از ته دلم ميگم) :?

متد هاي Ajax
Ajax کلا دو روش داره يکي روش Hidden frames و ديگري XML HTTP Request که در ادامه اينا رو بررسي ميکنيم.

Hidden frame features
Inline Frame ها در واقع يک Mini Browser است که توي خيلي از سايت ها اونو ديديد Inline Frame ميتونه آدرس خودش رو داشته باشه ... ميتونه مخفي بشه مثلا عرض و ارتفاع اون رو صفر ميکنيم يا با استفاده از Css و ... بوسيله JavaScript ميتونيم به متن داخل اون دسترسي داشته باشيم يا از داخل Frame به پدرش يعني پنجره اصليمون دسترسي داشته باشيم. در اين روش براي ارسال و دريافت کاربر بر روي Status bar پيغام ها رو ميبينه ... همچنين دکمه هاي Back - Forward -Stop , ... را هم داريم در مرورگر IE هنگام ارسال صداي click رو هم ميشنويم.
اما نسبت به روش دوم کند تره و نميشه بيشتر از يه درخواست رو به صورت همزمان داد(مگر اين که تعداد Frame ها رو بيشتر کنيم).

خوب يه مثال از اين روش فرض کنيد يه frame داريم به نام مثلا MyFrame و يه فرم ساده داريم ... همچنين يه div داريم به نام DivTarget که مي خواهيم نتيجه اي که از server مي آد اينجا نمايش داده بشه ...

کد:
<form action=“MyPage.php” target=“MyFrame” method=“POST”>
<input type=“text” name=“TextBox1”>
<div id=“DivTarget”></div>
<input type=“submit”>
</form>

<iframe name=“MyFrame” style=“display:none;”>
</iframe>


دقت کنيد که target فرم رو MyFrame قرار دادم.
خوب همون طور که ميبينيد در Action فرم نام فايل MyPage.php رو نوشتيم ببينيم توي اين فايل چيه؟

کد:
<!-- MyPage.php -->
<script language=“javascript”>
<?
   $Message = ‘Hello ’ . $_POST[‘TextBox1’];
?>
parent.document.getElementById(“DivTarget”).innerHTML =“<?= $Message;?>”;
</script>


همون طور که ميبينيد توي فايل MyPage.php پس از انجام پردازش هاي لازم يک کد جاوا اسکريپت توليد ميکنيم. چون اين صفحه در فريم MyFrame باز ميشود و اين frame فرزند پنجره ما به حساب مي آد، پس ما ميتونيم با استفاده از کد هاي جاوا اسکريپت به پدر (پنجره اصلي) دسترسي داشته باشيم همچنين به اجزاي پدر با کد زير يک متن که نتيجه پردازش ما است رو داخل DivTarget مينويسيم.

کد:
parent.document.getElementById(“DivTarget”).innerHTML =“My HTML code”;


کد زير مشابه کد بالاست ولي با ASP نوشته شده:
کد:
<!-- MyPage.asp -->
<script language=“javascript”>
<%
   Dim Message As String
   Message = “Hello “ + Request.form(“TextBox1”)
%>
parent.document.getElementById(“DivTarget”).innerHTML =“<%= Message %>”;
</script>


نکته: همون طوري که مشاهده ميکنيد سرور ما نياز به امکان اضافي نداره و زبون برنامه نويسي سمت سرور ما مهم نيست چي باشه...

XMLHTTP Request features
اين روش پيشرفته تر Ajax هست که نسبت به روش قبل از سرعت و کارايي بيشتري برخورداره (در واقع به اين ميگن Ajax اما روش قبلي رو هم به خاطر شباهت هايي Ajax به حساب مي آرن.)
1- به ما اين امکان رو ميده که درخواست هاي POST و GET رو به صورت نامتقارن از سرور انجام دهيم.
2- هيچ پيغامي بر روي Status bar به کاربر نشون نميده.
3-در يک لحظه به هر تعداد که بخواهيم ميتوانيم درخواست بدهيم (همزمان).
4- براي هر تغيير وضعيت مي ميتونيم متد هايي رو داشته باشيم و کارهايي رو به دلخواه انجام بديم. چون ما 4 وضعيت براي يک درخواست داريم که پشت سر هم اتفاق مي افتند :
الف- Initialized
ب- Started
ج- In the process of being returned
د- Completely finished

که براي هر کدوم ميتونيم کدي رو اجرا کنيم.
5- همه مرورگر ها از اون پشتيباني نمي کنند.
6- در اين روش ارسال داده دست خود ما است.

يک مثال از اين روش:
مثل مثال قبل يک فرم داريم و يک div :

کد:
<form onsubmit=“return AjaxSubmitForm(this);”>
<input type=“text” name=“TextBox1”>
<div id=“DivTarget”></div>
<input type=“submit”>
</form>


همون طور که مي بينيد خبري از frame نيست فقط يه تابع جاوا اسکريپت رو توي رخداد onsubmit فرم صدا ميزنيم.

حالا کدهاي مربوط به Ajax Engine(به دلايل آموزشي سعي شده کد ها ساده تر باشد):

کد:
function GetXmlHttpRequest()
{
   var XmlHttpReq;

   var msxmlhttp = new Array('Msxml2.XMLHTTP.5.0',
   'Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');

   for (var i = 0; i != msxmlhttp.length; i++)
   {
      try {
         XmlHttpReq = new ActiveXObject(msxmlhttp[i]); //For IE
      } catch (e) {
         XmlHttpReq = null;
      }
   }
   if(!XmlHttpReq )
      XmlHttpReq = new XMLHttpRequest();//For NS
   return XmlHttpReq;
}

/* ---------------------------------------------------------------------------- */

function PostData(Data, Url)
{
   var XmlHttpReq = GetXmlHttpRequest();
   if(!XmlHttpReq)
   {
      alert('Your Browser not support AJAX!');
      return false;
   }
   XmlHttpReq.open("POST", Url, true);
   XmlHttpReq.onreadystatechange = function()
   {
      if(XmlHttpReq.readyState == 4 && XmlHttpReq.status == 200)   
         PrintResult(XmlHttpReq.responseText);
   };

   XmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   XmlHttpReq.send(Data);
   return true;
}

/* ---------------------------------------------------------------------------- */

function AjaxSubmitForm(FrmObject)
{
   var Data;
   
   Data = "&TextBox1=" + FrmObject.TextBox1.value;

   PostData(Data, 'MyPage.php');
   
   return false;
}

/* ---------------------------------------------------------------------------- */

function PrintResult(TheData)
{
   window.document.getElementById(‘DivTarget').innerHTML = TheData;
}



قسمتي که با اون بيشتر سرو کار داريم توابع AjaxSubmitForm و PrintResult است.
چون XmlHTTPRequest در مرورگر هاي مختلف شکل هاي متفاوتي دارد تابع GetXmlHttpRequest با توجه به ورژن و نوع مرورگر Object مربوط به Xml Http Request ر ابراي ما مي سازد.

تابع PostData يک داده و يک آدرس مي گيرد و داده را به آدرس post مي کند. در واقع داده محتويات فرم ما است و آدرس همون آدرسيه که توي Action فرم مي نوشتيم (در برنامه نويسي کلاسيک)، اين تابع يعد از گرفتن نتيجه تابع PrintResult را صدا ميزند و نتيجه اي که از سرور رسيده است رو به اين تابع ارسال ميکند. اين تابع هم که مشخص است که چه کاري انجام ميده ... داده ورودي رو توي DivTarget مي نويسه.
در اين روش در کد سمت سرور نيازي به استفاده از کد هاي جاوا اسکريپت نيست مثال:

کد:
<!-- MyPage.php -->

<?
   $Message = ‘Hello ’ . $_POST[‘TextBox1’];
   print( $Message);
?>



نمونه هايي از Ajax:
1- سرويس Gmail که از هر دو روش فوق استفاده ميکنه.
2- http://www.maps.google.com
3- سيستم ثبت نام مقدماتي دانشگاه که از روش اول استفاده ميکنه.
4- همين جا ( http://www.RightClick.ir ) که از روش دوم استفاده ميکنه.


فايل PowerPoint اين مطلب رو ميتونيد از لينک زير دريافت کنيد:

http://www.rightclick.ir/downloads/ajax_zip

منابع:
http://www.ajaxpatterns.org
http://www.ajaxmatters.com
http://www.ajaxinfo.com
http://www.ajaxian.com
http://www.ajaxpatterns.org
http://www.petefreitag.com
http://www.clearnova.com

موفق و پيروز باشيد. :wink:

_________________
به جان زنده دلان، سعدیا، ملک وجود --- نیرزد آن که دلی را ز خود بیازاری


Last edited by mojtaba on 3 مرداد 1386 10:55, edited 1 time in total.

بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 16 بهمن 1385 13:50 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 6 تير 1385 8:11
پست ها : 769
محل سکونت: اصفهان
دريافتي: 0 تشكر
رسيده: 4 تشكر
سلام
مجتبي جان مثل هميشه عالي ، كامل و مفيد نوشتي. :wink:

_________________
چيزي رو كه دوست داري بدست بيار ... وگرنه مجبوري چيزي رو كه بدست مياري دوست داشته باشي
Chonoo.Com


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 26 بهمن 1385 8:51 
آفلاين
تازه وارد
تازه وارد

تاريخ عضويت: 1 شهريور 1384 14:54
پست ها : 3
دريافتي: 0 تشكر
رسيده: 0 تشكر
واقعا خيلي خوب بود .
فكر كنم اين تيم آژاكس هم باسه همينا باشه
اين سيستم ثبت نام دانشگاه آزادت هم فعال كني ماها تستش كنيم بد نمي شه ها ...


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 1 اسفند 1385 1:10 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 29 تير 1384 20:03
پست ها : 991
محل سکونت: شيراز
دريافتي: 14 تشكر
رسيده: 32 تشكر
سلام،
شما همون وحيدي هستي که من مي شناسم؟
به اينجا خيلي خوش اومدي...

غلام دوتا چايي بده آقا!:D

روي سرور خودم نصبه فقط لينکش رو گم کردم پيداش ميکنم و برات ميگذارم ... شايد هم پيام خصوصي فرستادم.

موفق باشيد. :wink:

_________________
به جان زنده دلان، سعدیا، ملک وجود --- نیرزد آن که دلی را ز خود بیازاری


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 17 اسفند 1385 10:07 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 29 تير 1384 20:03
پست ها : 991
محل سکونت: شيراز
دريافتي: 14 تشكر
رسيده: 32 تشكر
vahid نوشته است:
واقعا خيلي خوب بود .
فكر كنم اين تيم آژاكس هم باسه همينا باشه
اين سيستم ثبت نام دانشگاه آزادت هم فعال كني ماها تستش كنيم بد نمي شه ها ...


سلام،
اين لينکشه که تازه پيداش کردم:
http://www.rightclick.ir/test/UniversityProject/

بقيه مشخصات هم برات فرستادم..
موفقباشيد.

_________________
به جان زنده دلان، سعدیا، ملک وجود --- نیرزد آن که دلی را ز خود بیازاری


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 22 ارديبهشت 1386 19:10 
آفلاين
تازه وارد
تازه وارد

تاريخ عضويت: 22 ارديبهشت 1386 19:04
پست ها : 4
دريافتي: 0 تشكر
رسيده: 0 تشكر
با تشكر از شما
من يك سوال داشتم
فرض كنيد در يك صفحه موقعيت ها (ID) هاي مختلفي براي نشان دادن نتايجي كه از سرور برگشت داده مي شود داشته باشيم و بخواهيم كه مثلا اگر نتيجه فلان بود در فلان موقعيت نمايش داده شود اگر نتيجه چيز ديگر بود در موقعيت ديگر نمايش داده شود و ...
اينكار چطوري ممكن است؟ دنبال يك راه حل مي گردم


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 31 ارديبهشت 1386 12:34 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 29 تير 1384 20:03
پست ها : 991
محل سکونت: شيراز
دريافتي: 14 تشكر
رسيده: 32 تشكر
سلام،
روي کدي که خودم نوشتم توضيح ميدم:
توي تابع PrintResult چک ميکنيد چند تا if ميخواد. همين.
البته يه کار ديگه هم مي تونيد بکنيد که من هم بعضي جاها استفاده کردم و اون اينه که روي سرور کد جاوا اسکريپت توليد کنيد و بعد توي تابع ذکر شده به جاي نمايش با استفاده از تابع eval کد دريافتي رو اجرا کنيد.

موفق و سربلند باشيد.

_________________
به جان زنده دلان، سعدیا، ملک وجود --- نیرزد آن که دلی را ز خود بیازاری


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 8 خرداد 1386 10:28 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن

تاريخ عضويت: 13 مرداد 1385 13:34
پست ها : 711
دريافتي: 0 تشكر
رسيده: 0 تشكر
خيلي عالي بود بابا

_________________
دستور دادم بدنم را بدون مومياي در خاك ايران بگزارند تا قطره قطره بدنم را خاك ايران تشكيل دهد

<<كوروش كبير>>


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 20 آبان 1386 5:23 
آفلاين
داره خودمونی میشه
داره خودمونی میشه

تاريخ عضويت: 31 مرداد 1386 6:44
پست ها : 31
دريافتي: 0 تشكر
رسيده: 0 تشكر
ببخشيد اين sajax چيه و چه طوري کار ميکنه؟


بالا
 مشخصات  
 
 موضوع پست:
پستارسال شده در: 22 آبان 1386 18:49 
آفلاين
کاربر فعال انجمن
کاربر فعال انجمن
نماد کاربر

تاريخ عضويت: 6 تير 1385 8:11
پست ها : 769
محل سکونت: اصفهان
دريافتي: 0 تشكر
رسيده: 4 تشكر
آقا مجتبي در کدهايي که در زمينه AJAX است همين تابع sajax است که در برنامه OS ارتباط ما با قرار داده است، که در باره اش هم توي انجمن بحث شده است.

موفق باشي :wink:

_________________
چيزي رو كه دوست داري بدست بيار ... وگرنه مجبوري چيزي رو كه بدست مياري دوست داشته باشي
Chonoo.Com


بالا
 مشخصات  
 
نمايش پست ها از پيشين:  مرتب سازي بر اساس  
ارسال مبحث جديد پاسخ به مبحث [ 10 پست ] 

همه زمانها UTC + 3:30 ساعت هستند


چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: Google [Bot] و 0 مهمان


شما نمي توانيد مبحث جديدي در اين انجمن ايجاد کنيد
شما نمي توانيد به مباحث در اين انجمن پاسخ دهيد
شما نمي توانيد پست هاي خود را در اين انجمن ويرايش کنيد
شما نمي توانيد پست هاي خود را در اين انجمن حذف کنيد
شما نمي توانيد فايل هاي پيوست در اين انجمن ارسال کنيد

جستجو براي:
پرش به:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Persian Translation By : www.Maghsad.com