
در سری مقالات قبلی معرفی متدهای ایجکس در jQuery بعضی از متدهای پراستفاده مثل $.get() , $.post() و $.load() برای ارسال درخواست های AJAX را دیدیم.
در این مقاله به طور خاص قصد داریم در مورد متد $.ajax() در jQuery آموزش بدیم.
متد $.ajax() در jQuery
متد $.ajax() در jQuery برای ارسال درخواست های HTTP غیرهمزمان (asynchronous) استفاده می شود.این متد از همان اوایل در ورژن ۱ به کتابخانه جی کویری اضافه شده است.
تابع $.ajax() تمام کارهایی که در مقاله قبل صحبت کردیم را انجام می دهد و بصورت زیر نوشته می شود
پارامتر url یک رشته حاوی URLی که درخواست ایجکس را ارسال می کنیم دریافت می کند. درحالی که option یک آبجکت است که شامل تنظیمات درخواست AJAX ما را مشخص می کند.
لیست گزینه های option بسیار طولانی است که بصورت مختصر توضیحاتی در مورد هر کدام قرار می دهیم. برای خواندن عمیق توضیحات می توانید به داکیومنت رسمی متد $.ajax() در jQuery مراجعه کنید.
پارامتر option
لیست پارامترها به همراه نام و توضیحات آن ها را به ترتیب الفبای لاتین در زیر می بینید.
Accepts: نوع محتوا (content-type) ارسالی در هدر درخواست که برای سرور مشخص می کند که نوع پاسخ دریافتی قابل قبول چیستAsync: به منظور ارسال درخواست های asynchronous استفاده می شود که بطور پیش فرض true است.beforeSend: یک تابعcallbackقبل از ارسال درخواست اصلی ajax است که می تواند قبل از ارسال نهایی آبجکتjqXHRرا ویرایش کندcache: برای کش نشدن صفحه درخواست شده می توانیدfalseقرار بدید.Complete: یک تابع که می تواند بعد از تمام شدن درخواست (بعد ازerrorوsuccess) اجرا شود.Contents: آبجکتی که تعیین می کند که کتابخانه جی کوئری به چه صورت پاسخ دریافتی را تفسیر (parse) کند.contentType: نوع محتوای داده های ارسال شده به سرور را مشخص می کند.Context: آبجکتی برای به عنوان یکthisمی تواند برای توابع بازگشتی مربوط به ajax استفاده شود.Converters: آبجکتی شامل مبدل های انواع نوع داده (dataTypes)crossDomain: باtrueقرار دادن این مقدار می تواند درخواست های بین دامنه ای مثلJSONPرا ارسال کنید (مثلا درخواست ایجکس از دامنه netparadis.ir به netparadis.com) . به طور پیش فرض این امکان وجود ندارد.Data: داده ی ارسالی به سرور برای انجام عملیات روی آن بصورت ایجکسdataFilter: تابعی برای هندل پاسخ خام داده یXMLHttpRequestdataType: نوع داده قابل قبول بازگشتی از سرور.Error: در صورتی که درخواست ایجکس با خطا مواجه شود این تابع اجرا می شود.Global: ارسال یک رویداد گلوبال برای درخواست فعلیHeaders: آبجکتی برای افزودن هدرهای اضافی برای ارسال به سرورifModified: اگر می خواهید حتما نتیجه درخواست موفقیت آمیز باشد, این گزینه راtrueقرار بدید فقط در صورتی که پاسخ از آخرین درخواست تغییر کرده باشد.isLocal: اگر می خواهید که jQuery محیط اجرایی فعلی را بصورت محلی (local) در نظر بگیردtrueقرار بدیدJsonp: یک رشته برای تغییر نام تابع بازگشتی در یک درخواستJSONPjsonpCallbak: مشخص کردن نام تابع بازگشتی در یک درخواستJSONPmimeType: یک رشته برای بازنویسی mime-type درخواستXHRUsername: نام کاربری که به همراه پاسخXMLHttpRequestبرای احراز هویت درخواست اصلی مشخص می شودPassword: پسوردی که به همراه پاسخXMLHttpRequestبرای احراز هویت درخواست اصلی مشخص می شودproccessData: اگر این گزینه راfalseقرار بدید داده های پاس داده شده به گزینهdataتجزیه و تبدیل به query-string نمی شوند (البته اگر از قبل یک رشته نباشند.)scriptCharset: مقدار خاصیتcharsetرا برای تگ scriptی که با آن درخواست را ارسال می کنید, مشخص می کند.statusCode: آبجکتی از اعداد کدهای HTTP و توابعی که هنگام بازگشت درخواست با کد متناضر اجرا می شود.Success: در صورتی که درخواست ایجکس موفقیت آمیز باشد این تابع اجرا می شود.Timeout: یک شماره که مهلت دریافت پاسخ برای یک درخواست را بر حسب میلی ثانیه مشخص می کند.Traditional: اگر قصد دارید از استایل سنتی سریال کردن پارامتر ها (param serialization) استفاده کنید, true قرار بدید.Type: نوع درخواست ارسالی را مشخص می کند (POST یا GET)url: رشته حاوی آدرس URLی که درخواست برای آن ارسال می شود.Xhr: یکcallbackکه برای ساخت آبجکتXMLHttpRequestاستفاده می شود.xhrFields: یک آبجکت برای ست کردن آبجکت native XHR
خب لیست طولانی است ولی مشکلی نیست در ادامه چندتا از مثال را با متد $.ajax() در jQuery می بینیم.
مثال اول از متد $.ajax() در jQuery
ابتدا یک مثال که در مقاله متدهای ایجکس در jQuery استفاده کردیم را این بار با $.ajax() پیاده می کنیم.
|
1 2 3 4 5 6 7 8 9 10 11 |
$('#main-menu a').click(function(event) { event.preventDefault(); $('#main').load(this.href + ' #main *', function(responseText, status) { if (status === 'success') { $('#notification-bar').text('The page has been successfully loaded'); } else { $('#notification-bar').text('An error occurred'); } }); }); |
که با آپدیت آن کد ما به صورت زیر می شود :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$('#main-menu a').click(function(event) { event.preventDefault(); $.ajax(this.href, { success: function(data) { $('#main').html($(data).find('#main *')); $('#notification-bar').text('The page has been successfully loaded'); }, error: function() { $('#notification-bar').text('An error occurred'); } }); }); |
مثال دوم از متد $.ajax() در jQuery
در این مثال یک درخواست JSONP را برای دریافت اطلاعاتی از سرویس Joind.in ایجاد می کنیم. در این وبسایت شرکت کنندگان در رویدادها می توانند نظرات خودشان را ثبت کنند.
پس ما استفاده از تابع $.ajax() عنوان و توضیحات را با ارسال درخواست به api آن دریافت می کنیم.
کد jQuery ما بصورت زیر خواهد بود.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$.ajax({ url: 'http://api.joind.in/v2.1/talks/10889', data: { format: 'json' }, error: function() { $('#info').html('<p>An error has occurred</p>'); }, dataType: 'jsonp', success: function(data) { var $title = $('<h1>').text(data.talks[0].talk_title); var $description = $('<p>').text(data.talks[0].talk_description); $('#info') .append($title) .append($description); }, type: 'GET' }); |
در کد جی کوئری بالا, چندتا از گزینه هایی که در لیست بودند را استفاده کردیم. در ابتدا آدرس url مربوط به api را مشخص کردیم.
به دلیل اینکه api سایت موردنظر فقط درخواست های JSONPرا قبول می کند, در بالا از dataTypeبرای ست کردن این مقدار استفاده کردیم.
بعد, از data برای مشخص کردن نوع فرمتی که قصد دریافت از سرور را داریم, بهره بردیم.
بعد از آن نوع متد درخواست HTTP را با استفاده از type بصورت GET قرار دادم.
و در نهایت از success برای نمایش عنوان و توضیحات و error برای اجرای تابع بازگشتی نمایش خطاا استفاده کردیم.
دموی آنلاین را می توانید در https://jsfiddle.net/2tqja09e/2577/ ببینید.
جمع بندی
در این آموزش در مورد قدرتمندترین تابع ایجکس در جی کوئری یعنی $.ajax() صحبت کردیم.
متد $.ajax() به شما امکان کنترل بیشتری روی نحوه ارسال درخواست به سمت سرور و همچنین تجزیه و تحلیل پاسخ دریافتی را می دهد.
واقعا استفاده از این تابع تمام نیازهای ما برای انجام عملیات AJAX در پروژه های مختلف را می دهد.
برای درک بهتر پتانسیل این تابع, برای بازی با نمونه کدهای مربوطه کنجکاو باشید و پارامترهای مختلفی که معرفی شد را تست کنید.
امیدوارم از آموزش متد $.ajax() در jQuery نهایت استفاده را برده باشید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید







با سلام!
خیلی ببخشید من اگر بخوام بعد از لود شدن صفحه مدام اطلاعات بین سرور و کلاینت جابه جا بشه میشه از ajax استفاده کرد و اگر میشه چطور مثلا شما گفتید که بعد از کلید، اما من میخوام بعد از لود کامل صفحه ای اتفاق بیوفته!
خیلی ممنون میشم راهنمایی کنید.
سلام. باید از document.ready استفاده کنید تا چک بشه بعد لود کامل صفحه کدها اجرا بشه
سلام
میشه یک مثال با این کد زیر بزنید که چه جوری اطلاعات از طریق فرم به صفحه دیگر ارسال کنیم:
$.ajax({
url: ‘http://api.joind.in/v2.1/talks/10889’,
data: {
format: ‘json’
},
error: function() {
$(‘#info’).html(‘
An error has occurred
‘);
},
dataType: ‘jsonp’,
success: function(data) {
var $title = $(”).text(data.talks[0].talk_title);
var $description = $(‘
‘).text(data.talks[0].talk_description);
$(‘#info’)
.append($title)
.append($description);
},
type: ‘GET’
});
سلام. خیر باید با آزمایش و خطا یاد بگیرید و از کنسول هم کمک بگیرید.
موفق باشید.