PDA

View Full Version : آموزش: آپلود فایل در با Ajax در ASP.MVC3 – نسخه 3



hakim22
دوشنبه 01 مهر 1392, 17:00 عصر
در پروژه ی قبل (http://barnamenevis.org/showthread.php?418769-%D8%A2%D9%BE%D9%84%D9%88%D8%AF-%DA%A9%D8%B1%D8%AF-%D9%81%D8%A7%DB%8C%D9%84-%D8%A8%D8%A7-ajax-%D8%AF%D8%B1-ASP.MVC-4-%D9%86%D8%B3%D8%AE%D9%87-2) تلاش کردیم با استفاده از File API در HTML5 و Ajax در jQuery سیستم آپلود فایل به سرور طراحی کنیم.


http://s3.picofile.com/file/7931192896/small.jpg

این سیستم قادر بود چندین فایل را به طور همزمان به سرور ارسال کند. همچنین کاربر می توانست قبل از ارسال به لیست فایلها یک یا چند فایل دیگر اضافه کند یا موارد دلخواهی را حذف کند. پس از اینکه کاربر دکمه ی ثبت را میزد فایلها به ترتیب و با استفاده از ajax به سرور ارسال میشد.

با این وجود یک مشکل در پروژه ی قبل وجود داشت. درست است که بعد از ارسال هر فایل به کاربر اطلاع داده میشد که فایل با موفقیت به سرور ارسال شده است. اما هیچ مکانیزمی برای اطلاع از پایان یافتن همه ی آپلودها وجود نداشت.

در حقیقت ما به متدی احتیاج داریم که به صورت یک رویداد عمل کند و پس از پایان آپلود همه ی فایلها فعال شود. در نسخه ی 3 این مشکل برطرف شده است و برنامه نویس با کمک متد done() از پایان یافتن آپلود اطلاع حاصل می کند. برای طراحی چنین متدی از اشیای Deferred در jQuery استفاده شده است. این اشیا کمک می کنند انواع رویدادهای ajax مانند success و fail را در خارج از دستور ajax تعریف کنیم. با این روش می توان دستورات ajax را در هر جایی فراخوانی کرد در حالی که رویدادها تنها در یک قسمت کد مدیریت می شوند.

ابتدا برای هر آپلود ajax یک promise تعریف می کنیم. وظیفه ی یک promise در Ajax این است که قول میدهد نتیجه ی دستور ajax را بعد از پایان کار به ما خبر دهد. سپس هر promise را به آرایه ای با عنوان promises با کمک دستور push منتقل می کنیم. بعد با کمک دستور زیر این آرایه را به عنوان خروجی تابع uploadAllFiles باز می گردانیم.

$.when.apply($, promises)

در اینجا متد done() که در اشیای deferred وجود دارد نتیجه کار را به ما گزارش می کند.

دانلود پروژه – آپلود فایل در ASP.MVC با کمک ajax – نسخه 3
(http://s4.picofile.com/file/7946888602/FileUploadDemo_v3.rar.html)