سلام
مي خوام بعد اينكه كار تابع send آجاكس تموم شد يه كاري انجام بدم. دستور شرطي چي ميشه؟
مثلا براي اينكه بگيم request كامل انجام شد از 200 اسفاده مي كنيم
سلام
مي خوام بعد اينكه كار تابع send آجاكس تموم شد يه كاري انجام بدم. دستور شرطي چي ميشه؟
مثلا براي اينكه بگيم request كامل انجام شد از 200 اسفاده مي كنيم
سلام.
یک خرده پیشتر توضیح بده، این 200 چیه؟
سلام
خصوصیت onreadystatechange برای همین منظور است.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نه منظورم 200 يا 4 نبود. اين شرط ها رو توي تابعي كه ايونت هنلدر onreadystatechange فاير ميكنه بررسي ميشه.
من يه كد شرطي مي خوام كه برا بعده تابع send بزارم. مثلا فرض كنيد كد بالا اجرا كرديم و يه متني توي يه جايي مثلا div با آي دي test نوشته شده. حالا مي خوام اين دستور رو بعده send اجرا كنم.
اگه بعد send درجا اين خط رو بيارم يه رشته ي تهي واسم آلرت مي كنه. در حالي كه من مي خوام اون چيزي رو كه تابع send توي دايو test نوشته واسم آلرت كنه. واسه اين كار يه وقفه اي چيزي لازم دارم مثل يه آلرت ديگه.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من اون چيزه رو مي خوام حالا چيه خودمم نمي دونم!كد شرطي يا هر چيز ديگه!
سلام.
این یکی خوده خودشه!
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خدا وكيلي اين كجاش خوده خودشه؟
ببين من توي كد بالايي آرگومان اول تابع req رو مي كنم test.php.
توي test.php هم فقط يه خط نوشتم :
حالا بعده خطکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نوشتم:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نتيجه ش ميشه كد زير:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خب اينو اجرا كني چي ميشه؟ وقتي كاربر دكمه ي Go! رو ميزنه رشته ي test اينتو نوشته ميشه.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد پنجره ي alert ظاهر ميشه كه منطقا بايستي رشته ي test رو نشون بده كه نشون نميده حالا چراش بماند. حالا اكه يه alert ديگه مثل alert('*) مابين دستورکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
قرار بگيره چي ميشه؟ هيچي اين دفعه رشته ي test توي پنچجره ي alert نشون داده ميشه.كه من اينو مي خوام. اينجا alert('*) يه جور وقفه است. كه اجازه ميده send كارشو انجام بده بعد دستورکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اجام شه كه طبيعتا جواب درست نشون ميده. حالا من مي گم جاي اون alert('*) چي چي بذارم كه همون كار رو انجام بده؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آقا يكي به داد من برسه!!!
سلام
به نظر من که لینک کاربر Amin eHelp nhnknT لینک بدی نبود ولی شما کمی دقت کافی ندارید.خدا وكيلي اين كجاش خوده خودشه؟
کاملاً واضح است که رویداد alert شما باید بعد از تکمیل عملیات و رسیدن اطلاعات رخ دهد نه بعد از ارسال اطلاعات.
شما send میکنید و بعد هم alert؟؟؟؟ پس رویداد رسیدن اطلاعات کشک؟؟
send را چنین اصلاح کنید و مجدداً تست کنید.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب من كه نگفتم كد ايشون كد بديه. كليم رفتم تو بحره كد ايشون وايني كه شما اين بالا نوشتين. ولي نوشته هاي شما هيچ كدوم جواب منو نميده. هدف من آلرت كردن كه نيست. من اينجا آلرت رو براي نمونه ذكر كردم. من اصلا نمي خوام آلرتم بعده تکمیل عملیات و رسیدن اطلاعات باشه بلكه مي خوام بعد از ارسال اطلاعات باشه. يعني دقيا مي خوام اول سند كنم بعد آلرت. اين وسطم رويداد دسيدن اطلاعات كشك نيست از اونم به موقش استفاده كردم.
جريان اينكه من مي خوام با استفاده از responseText يه متني رو بگيرم. حالا اگه اين متن نشون دهنده ي خطاهاي فرم من باشه اونارو جلو فيلد هاي هر فرم بنويسه در غير اين صورت هيچي جلوي فيلد هاي فرمم نوشته نشه تمام اين كارا تا اتمام كار تابع send انجام ميشه. خوب اين تا اينجا!
حالا بعده اينكه send كارشو انجام داد مي خوام يه سرچ كوچولو توي فرمم بكنم. اگه جلوي هر فيلد فرمم ديدم كه يه متني كه نشون دهنده ي وجود خطا توي اون فيلده وجود داشته باشه مي گم فرمم خطا داره و كاربر با زدن دكمه ي submit نمي تونه فرمش رو ارسال كنه نه اگه جلو تموم فيلد هاي فرمم خالي باشه كه نشون مي ده فرم هيچي ايرادي نداره كاربر با زدن دكمه سابميت بره به صفحه اي كه توي اتريبيوت تگ form مشخص كردم. خوب اين تا اينجا!
آلرتيم كه اون بالا گفتم براي تست كردن همين سرچه. مي خوام ببينم دقيقا بعده send جواب ميده يا نه كه بالا كدشو گذاشتم كه ديدم جواب نميده. يعني بايد از يه كدي استفاده كنم كه اين كد جلوي اجراي آلرت رو تا موقعي كه Send كارشو تومو نكرده بگيرم. بعده اينكه send كارشو تموم كرد و خطاها توي صفحه نوشته شدند آلرت اجرا شه.
اميدوارم تونسته باشم سوالم رو توضيح بدم!
ولي فكر كنم اگه كدي رو كه يه كوچولو اصلاح شده ي كدهAmin eHelp هستش و تو دو پست قبليم فرستادم اجرا كنيد دقيقا متوجه مشكل من مي شيد.
شديدا التماس كمك دارم
Last edited by milad_66; 17-08-2008 at 21:27.
سلام
من احساس میکنم مشکل شما با مفهوم عملیات های غیر همزمان است یا اصطلاحاً Async .
شما تصور صحیحی از عملیان ها ی چند ریسمانی ندارید.
من فکر میکنم شما اینطور تصور میکنید که اول send انجام میشود و بعد رویداد onreadystatechange اتفاق می افتد و در اخر هم دستور بعد از send، درست است؟
اگر اینطور فکر میکنید، این کاملاً اشتباه است، کاملاً.
اگر اینطر بود اصولاً چه نیازی به onreadystatechange بود؟؟؟ خوب همان بعد از متد send خروجی را میگرفتیم؟! یعنی اول send و بعد هم خواندن responseText و بعد هم مابقی کدها؟ پس باز هم onreadystatechange کشک !
شما با فراخوانی متد send یک ریسمان مجزا را فعال میکنید و فوراً دستور بعد از send انجام میشود و کار ریسمان جاری پایان میگیرد! تمام.
بعد ان ریسمان مجزا که فعال شده، سر فرصت به صفحه مورد نظر در وب وصل شده و درخواست میدهد، پردازش کدهای سمت سرور php یا asp و asp.net و... در سرور آغاز میشود و بعد اطلاعات خرامان خرامان دانود میشد، عین پروسه باز کردن یک صفحه در مرور گر.
بعد که اطلاعات کامل دانلود شد و همه چیز تمام شد، آن ریسمان به عنوان اخرین کارش onreadystatechange را با readyState=4 و status = 200 فراخانی میکند تا اجرا شود و بعد کار این ریسمان هم تمام میشود.
این پروسه دقیقاً مثل آوردن یک صفحه و دیدن در IE است، بسته به حجم آپلود و دانلود و سنگینی کدهای سرور و سرعت اینترنت و ترافیک شبکه و... میتوانید بین کسری از ثانیه تا چندین دقیقه طول بکشد.
در حالی که دستور بعد از send چون در ریسمان مجزا اجرا شده بود، منتظر نخواهد ماند و فوراً اجرا میشود.
شما هر کاری را نیاز دارید بعد از رسیدن داده ها انجام شود، باید در رویداد onreadystatechange وارد کنید نه بعد از send.
اصولاً بعد از send دیگر کاری ندارید که انجام دهید.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)