PDA

نسخه کامل مشاهده نسخه کامل : كد انجام شدن يه response



milad_66
13-08-2008, 14:33
سلام
مي خوام بعد اينكه كار تابع send آجاكس تموم شد يه كاري انجام بدم. دستور شرطي چي ميشه؟
مثلا براي اينكه بگيم request كامل انجام شد از 200 اسفاده مي كنيم

eAmin
13-08-2008, 20:57
سلام.

یک خرده پیشتر توضیح بده، این 200 چیه؟

_H2_
14-08-2008, 01:49
سلام
خصوصیت onreadystatechange برای همین منظور است.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

milad_66
16-08-2008, 14:25
سلام
خصوصیت onreadystatechange برای همین منظور است.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نه منظورم 200 يا 4 نبود. اين شرط ها رو توي تابعي كه ايونت هنلدر onreadystatechange فاير ميكنه بررسي ميشه.

من يه كد شرطي مي خوام كه برا بعده تابع send بزارم. مثلا فرض كنيد كد بالا اجرا كرديم و يه متني توي يه جايي مثلا div با آي دي test نوشته شده. حالا مي خوام اين دستور رو بعده send اجرا كنم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه بعد send درجا اين خط رو بيارم يه رشته ي تهي واسم آلرت مي كنه. در حالي كه من مي خوام اون چيزي رو كه تابع send توي دايو test نوشته واسم آلرت كنه. واسه اين كار يه وقفه اي چيزي لازم دارم مثل يه آلرت ديگه.
من اون چيزه رو مي خوام حالا چيه خودمم نمي دونم!:31: كد شرطي يا هر چيز ديگه!

eAmin
16-08-2008, 17:04
نه منظورم 200 يا 4 نبود. اين شرط ها رو توي تابعي كه ايونت هنلدر onreadystatechange فاير ميكنه بررسي ميشه.

من يه كد شرطي مي خوام كه برا بعده تابع send بزارم. مثلا فرض كنيد كد بالا اجرا كرديم و يه متني توي يه جايي مثلا div با آي دي test نوشته شده. حالا مي خوام اين دستور رو بعده send اجرا كنم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه بعد send درجا اين خط رو بيارم يه رشته ي تهي واسم آلرت مي كنه. در حالي كه من مي خوام اون چيزي رو كه تابع send توي دايو test نوشته واسم آلرت كنه. واسه اين كار يه وقفه اي چيزي لازم دارم مثل يه آلرت ديگه.
من اون چيزه رو مي خوام حالا چيه خودمم نمي دونم!:31: كد شرطي يا هر چيز ديگه!
سلام.

این یکی خوده خودشه!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

milad_66
16-08-2008, 20:03
خدا وكيلي اين كجاش خوده خودشه؟:18:
ببين من توي كد بالايي آرگومان اول تابع req رو مي كنم test.php.
توي test.php هم فقط يه خط نوشتم :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحالا بعده خط

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدنوشتم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدنتيجه ش ميشه كد زير:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخب اينو اجرا كني چي ميشه؟ وقتي كاربر دكمه ي Go! رو ميزنه رشته ي test اينتو نوشته ميشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعد پنجره ي alert ظاهر ميشه كه منطقا بايستي رشته ي test رو نشون بده كه نشون نميده حالا چراش بماند. حالا اكه يه alert ديگه مثل alert('*) مابين دستور

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدو

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدقرار بگيره چي ميشه؟ هيچي اين دفعه رشته ي test توي پنچجره ي alert نشون داده ميشه.كه من اينو مي خوام. اينجا alert('*) يه جور وقفه است. كه اجازه ميده send كارشو انجام بده بعد دستور

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیداجام شه كه طبيعتا جواب درست نشون ميده. حالا من مي گم جاي اون alert('*) چي چي بذارم كه همون كار رو انجام بده؟

milad_66
17-08-2008, 19:41
آقا يكي به داد من برسه!!!

_H2_
17-08-2008, 20:34
سلام

خدا وكيلي اين كجاش خوده خودشه؟
به نظر من که لینک کاربر Amin eHelp nhnknT لینک بدی نبود ولی شما کمی دقت کافی ندارید.

کاملاً واضح است که رویداد alert شما باید بعد از تکمیل عملیات و رسیدن اطلاعات رخ دهد نه بعد از ارسال اطلاعات.
شما send میکنید و بعد هم alert؟؟؟؟ پس رویداد رسیدن اطلاعات کشک؟؟

send را چنین اصلاح کنید و مجدداً تست کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

milad_66
17-08-2008, 21:19
خوب من كه نگفتم كد ايشون كد بديه. كليم رفتم تو بحره كد ايشون وايني كه شما اين بالا نوشتين. ولي نوشته هاي شما هيچ كدوم جواب منو نميده. هدف من آلرت كردن كه نيست. من اينجا آلرت رو براي نمونه ذكر كردم. من اصلا نمي خوام آلرتم بعده تکمیل عملیات و رسیدن اطلاعات باشه بلكه مي خوام بعد از ارسال اطلاعات باشه. يعني دقيا مي خوام اول سند كنم بعد آلرت:31:. اين وسطم رويداد دسيدن اطلاعات كشك نيست از اونم به موقش استفاده كردم.
جريان اينكه من مي خوام با استفاده از responseText يه متني رو بگيرم. حالا اگه اين متن نشون دهنده ي خطاهاي فرم من باشه اونارو جلو فيلد هاي هر فرم بنويسه در غير اين صورت هيچي جلوي فيلد هاي فرمم نوشته نشه تمام اين كارا تا اتمام كار تابع send انجام ميشه. خوب اين تا اينجا!
حالا بعده اينكه send كارشو انجام داد مي خوام يه سرچ كوچولو توي فرمم بكنم. اگه جلوي هر فيلد فرمم ديدم كه يه متني كه نشون دهنده ي وجود خطا توي اون فيلده وجود داشته باشه مي گم فرمم خطا داره و كاربر با زدن دكمه ي submit نمي تونه فرمش رو ارسال كنه نه اگه جلو تموم فيلد هاي فرمم خالي باشه كه نشون مي ده فرم هيچي ايرادي نداره كاربر با زدن دكمه سابميت بره به صفحه اي كه توي اتريبيوت تگ form مشخص كردم. خوب اين تا اينجا!
آلرتيم كه اون بالا گفتم براي تست كردن همين سرچه. مي خوام ببينم دقيقا بعده send جواب ميده يا نه كه بالا كدشو گذاشتم كه ديدم جواب نميده. يعني بايد از يه كدي استفاده كنم كه اين كد جلوي اجراي آلرت رو تا موقعي كه Send كارشو تومو نكرده بگيرم. بعده اينكه send كارشو تموم كرد و خطاها توي صفحه نوشته شدند آلرت اجرا شه.
اميدوارم تونسته باشم سوالم رو توضيح بدم!
ولي فكر كنم اگه كدي رو كه يه كوچولو اصلاح شده ي كدهAmin eHelp هستش و تو دو پست قبليم فرستادم اجرا كنيد دقيقا متوجه مشكل من مي شيد.
شديدا التماس كمك دارم

_H2_
18-08-2008, 00:47
سلام
من احساس میکنم مشکل شما با مفهوم عملیات های غیر همزمان است یا اصطلاحاً 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 دیگر کاری ندارید که انجام دهید.

milad_66
18-08-2008, 09:06
سلام
من احساس ميکنم مشکل شما با مفهوم عمليات هاي غير همزمان است يا اصطلاحاً Async .
شما تصور صحيحي از عمليان ها ي چند ريسماني نداريد.

من فکر ميکنم شما اينطور تصور ميکنيد که اول send انجام ميشود و بعد رويداد onreadystatechange اتفاق مي افتد و در اخر هم دستور بعد از send، درست است؟

اگر اينطور فکر ميکنيد، اين کاملاً اشتباه است، کاملاً.
خدا شاهده كه من به هيچ وجه منالوجود اين طوري فكر نميكنم!



بسته به حجم آپلود و دانلود و سنگيني کدهاي سرور و سرعت اينترنت و ترافيک شبکه و... ميتوانيد بين کسري از ثانيه تا چندين دقيقه طول بکشد.

در حالي که دستور بعد از send چون در ريسمان مجزا اجرا شده بود، منتظر نخواهد ماند و فوراً اجرا ميشود.
ايول من همينو مي گم. خوب شما مي گين دستور بعد از Send يه ريسمان جداست و فورا اجرا ميشه اين درست. حالا منم مي گم چيكار كنم كه اون دستور بعد از send رو نگه دارم بعد از اينكه اون كار هايي كه قرار بود انجام شه انجام شد دستورات بعد از Send اجرا شه.


شما هر کاري را نياز داريد بعد از رسيدن داده ها انجام شود، بايد در رويداد onreadystatechange وارد کنيد نه بعد از send.
اصولاً بعد از send ديگر کاري نداريد که انجام دهيد.
يه سوال؟
من مي خوام يه متغيير سراسري تعريف كنم بعد اونو توي رويداد onreadystatechange تغيير بدم و بعد از اون متغيير يه جاي ديگه استفاده كنم .كه اين اتفاق نمي افته. اگه بشه همچين كاري كرد ديگه نميرم سراغ كارهايي كه بالا گفتم

eAmin
18-08-2008, 09:10
سلام.

ماشالله _H2_ جان اینقدر باحال توضیح می دن که جای هیچ حرفی رو باقی نمی زارن!!!

کدها ی پست شماره ی هشت باید جواب بده...

اگر از همون اول دقت می کردی منظور من از اول این قسمت بود!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
می بینی که توی این تابع ما دوتا در خواست داریم، که جواب گوی سوال شما بود!

milad_66
18-08-2008, 09:36
خوب بذارين اينطوري مطرح كنم. يه فرم دارم روي رويداد onsubmit يه تابع تعريف كردم و توي اين تابع تمام كارهاي مربوط به open ,و ... انجام دادم. حالا در نهايت مي خوام بگم اگه اروري وجود داشته باشه اين تابع return false كنه كه باعث ميشه با كليك روي سابميت كاربر هيجا نره و توي هميون صفحه بمونه ولي نه اگه هيچ اروري وجود نداشته باشه return true شه و كاربر با زدن دكمه سابميت به به يه صفحه ي ديگه.
خوب من توي تابعي كه موقع رويداد onreadystatechange فاير ميشه اومدم responseText رو گرفتم و متن رو پارس كردم و متن پارس شده رو سر جاي خودش نوشتم. حالا اون آلرت رو واسه ي تست مي خواستم. َAmin eHelp درسته شما توي كدتون اينو نوشته بودين ولي جوابگوي سوال من نبود.
H2_ هم مي گن هر كاري مي خوام بايد در رويداد onreadystatechange انجام بدم نه بعده send. خوب اين قضيه ي return true و return false رو چيكارش كنم چه جوري توي رويداد onreadystatechange انجام بدم؟ من مي خواستم بعد از send بيام مقاديري رو كه موقع رويداد onreadystatechange نوشته بودم رو بگيرم اگه نوشته اي وجود داشته باشه بگم return false در غير اين صورت return true.
يا يه كار ديگه! يه متغير سراسري تعريف كنم بيام توي رويداد onreadystatechange با توجه به responseText مقدار اونو تغير بدم. مثلا بگم اگه responseText يك باشه متغيير error ( همون متغير سراسريه ) رو بكنش 0 در غير اين صورت بكنش 1. بعد مي خواستم بگم بعد از send اگه مقدار error صفر باشه return true كن وگرنه return false. ولي خوب اينم نشد
چيكار كنم؟

_H2_
18-08-2008, 22:39
سلام
میدونید مشکل کجاست؟
شما میخواهید راه بروید!
ما میگیم، اون کفش را پایتان کنید و راه بروید! ولی شما میگویید من دستکش میخواهم که با دست هایم راه برم اگه میتونید کمکم کنید.

آخه چه کاری برادر؟! خوب کفش را بپوش و راه برو! میشه روی دست و روی کله هم راه رفت ولی اینکه راهش نیست!


اصلاً شما دارید ذات ajax را زیر سوال میبرید، ajax برای چیست؟
مزیت ajax آن است که اجازه میدهد کاربر دکمه ای را کلیک کند و درخواستی در سرور پردازش شود ولی صفحه ای که کاربر میبیند بلوکه نشود و ریسمان کاری کاربر آزاد باشد و کاربر بتواند در حین درخواست قبلی تا انجامش، همچنان با page در ارتباط باشد.
وگرنه که ajax بدرد نمیخورد، اگر قرار باشد، ریسمان کاربر معطل باشد تا عمل قبلی انجام شود که دیگر ajax اش به چه درد خورده؟


باشه قبول روی دست راه بروید! ولی یک بار فرمول زیر را انجام دهید، ببینید جواب میدهد یا نه؟
شما بیاید هر کدی که دلتان میخواهد و دوست دارید در بعد از send بنویسید، (بله، گفتم بعد از send) هرچه خواستید، 1000 خط کد js بنویسید.
تاییپ تان تمام شد؟ کل کارهایی که میخواستید را بعد از send نوشتید؟ به نظرتان کافی است و مشکلتان را حل میکند؟
خوب حالا همه اش را cut کنید و در ادامه داخلی رویداد onreadystatechange بیایید paste کنید.
اصلاً به کس دیگری بگویید این cut و paste را انجام دهد، شما نیت کنید یا تصور کنید که کدها همچنان در بعد از send قرار دارد.

یک تستی کنید و ببینید چه میشود.

milad_66
19-08-2008, 09:25
باشه قبول روی دست راه بروید! ولی یک بار فرمول زیر را انجام دهید، ببینید جواب میدهد یا نه؟
شما بیاید هر کدی که دلتان میخواهد و دوست دارید در بعد از send بنویسید، (بله، گفتم بعد از send) هرچه خواستید، 1000 خط کد js بنویسید.
تاییپ تان تمام شد؟ کل کارهایی که میخواستید را بعد از send نوشتید؟ به نظرتان کافی است و مشکلتان را حل میکند؟
خوب حالا همه اش را cut کنید و در ادامه داخلی رویداد onreadystatechange بیایید paste کنید.
اصلاً به کس دیگری بگویید این cut و paste را انجام دهد، شما نیت کنید یا تصور کنید که کدها همچنان در بعد از send قرار دارد.

یک تستی کنید و ببینید چه میشود.
حرف هاي شما تاييد ميشه. ولي آقاجون يه دقيقه به حرف من توجه كن. مشكل من اينجاست!
يه فرم دارم. روي ايونت onsubmit يه تابع تعريف كردم به اسم validate داخل اين تابع تموم كارهاي مربوط به ajax وجود داره. حالا هر كاري كه اين تابع انجام مي ده بماند در نهايت بايد يا true بر گردونه يا false. حالا من اين يه تيكه كد رو

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چه جوري توي رویداد onreadystatechange قرار بدم؟ جواب نمي ده.
مثلا براي تست نوشتم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه اين دو خط درست كار كنه نبايستي با زدن سابميت به يه صفحه ي ديگه بره! درسته؟

_H2_
19-08-2008, 14:08
سلام
یک پیشنهاد

دوست عزیز، شما میتوانید یک کد نمونه کامل به صورت html و js بگذارید، تا من یا دیگر دوستان همان را اصلاح کنید و به شما پس دهیم؟؟؟

لازم نیست همه فیلدها وجود داشته باشد، فقط یک فیلد یا دو فیلد را قرار دهید و کدهای مربوطه هم باشد، کدی که میخواهید بعد از send هم انجام شود، قرار دهید.

شما این را بگذارید، درست کردنش با من یا دوستان دیگر.

نمونه تان یک تک فایل کامل باشد تا کامل هم اصلاح شود و کدی که کار خواهد کرد را تحویل بگیرید.

خوبه؟

فقط من به شخصه چیزی از php نمیفهمم، پس بدون php راحت تر متوجه میشوم چه شده!

milad_66
20-08-2008, 17:01
سلام
test.html

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید test.php

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

يه فرم تك فيلدي نوشتم. مقدار اون وقتي توي صفحه ي test.php پردازش ميشه اگه مقدار اون فيلد خالي باشه responseText مقدارش به اين شكل خواهد بود:
1|empty
و در غير اين صورت به شكل:
0|
حالا بعد از Send مي خوام اين كار رو انجام بدم.
يه متغير سراسري تعريف كنم و توي تابعي كه براي request.onreadystatechange نوشتم يه اين صورت دستكاريش كنم
اگه response[ 0 ] من برابر 0 باشه ( يعني اروري وجود نداره ) اين متغير مقدار true بگيره
اگه response[ 0 ] من برابر 1 باشه ( يعني اروري وجود داره ) اين متغير مقدار false بگيره
بعد بعد از دستور send بنويسم :
[code]If ( error == 1 )
Return false;
Else if ( error == 0 )
Return true;
خوب چون دستورات بعد از send فورا اجرا ميشه در نتيجه اگه مقدار اوليه ي error برابر 0 باشه حتي اگه اروري هم وجود داشته باشه true برگردونده ميشه.
شما مي گين اين خط رو بذارم داخل تابعي كه براي request.onreadystatechange نوشتم ولي توي return ها مشكل دارم.
خيلي از فرم ها رو نگاه كردم اكثرا از ايونت onblur استفاده كردند و لي من اينجا حتما بايد از ايونت onsubmit استفاده كنم.

_H2_
21-08-2008, 11:33
سلام
این هم یک نمونه جواب که خودم شخصاً تستش کردم.
البته من نام فیلدها را با معنی تر گذاشتم و نیز دکمه submit را هم در زمان لازم فعال و غیر فعال میکنم ولی این تغییر disabled ربطی به ذات کد ندارد و اگر disabled هم تغییر نکند، باز بدون جواب صحیح submit ممکن نیست.

ساختار response را هم ساده تر کردم، عدد یک یعنی ورودی صحیح است و صفر یعنی غلط است، شما میتوانید هر طور دوست دارید تغییرش دهید.

چون از تو در تویی زیاد هم خوشم نمی آید توابع جدید DataRecive و CreateXML[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] را هم اضافه کردم.
(
البته کدCreateXML[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] چندان خوب نیست و برای پشتیبانی از مرور گر های متفاوت باید کدی قوی تر نوشته شود.
چون در اصل فقط همین بخش کد است که در مرور گرها تفاوت دارد.
)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

milad_66
21-08-2008, 14:32
آقا از بابت كمكتون ممنون
من كد شما رو يه كوچولو تغيير دادم اونم اينكه فراخواني تابع Valdation() رو محول كردم به ايونت onsubmit.
نياز كار من توي يه فرمي اينه. چون اين فرم من يه طوريه كه براي اينكه بگم طرف فرم رو درست پر كرده مقدار چند فيلد به هم وابستن و بايد مقادير اونا باهم چك بشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخوب باز اينجا يه مشكل وجود داره اگه طرف دفعه ي اول فرم رو درست پر كنه بايد 2 بار سابميت رو بزنه تا بره به صفحه ي test2.php چراشم كه معلومه همون قضيه ي ريسمان جداست كه مي گين.
چيكار كنم؟
مي گم خيلي دنبال وليدت كردن فرم با ajax گشتم كه اكثرا مثل شما از ايونت onchange يا onblur استفاده كردم. من يه چيزي مي خوام كه تابعي رو كه براي وليدت كردن فرم هست رو به هنگام فاير شدن ايونت onsubmit فراخواني كنه. يه كدي مثل همين كد بالا

_H2_
21-08-2008, 15:59
سلام
من اصلاً اصرار شما را برای اعتبار سنجی در زمان submit درک نمیکنم.
همانوطر که گفتید عموم اعتبار سنجی ها در onchange و onblur اتفاق می افتد و هیچ مشکلی هم ندارد، این روش استاندارد و ذاتی امکانات asp.net برای اعتبار سنجی هم است.

چون در این روش استاندارد کاربر کمترین معطل شدن جهت اعتبار سنجی را دارد و در حالی که دارد فیلدها را پر میکند، در پس ضمینه اعتبار سنجی هم انجام میشود، در حالی که عقب انداختن اعتبار سنجی به اخرین لحظات و پس از پر کردن کامل اطلاعات، طبیعتاً کاربر را تا پایان اعتبار سنجی معطل میکند.


..وليدت كردن فرم با ajax گشتم كه اكثرا مثل شما از ايونت ...
چون وجود ajax برای سرعت بیشتر و کم کردن همین معطلی ها است، تا کاربر در زمان کمتری کار را انجام دهد.
==============

اگر همچنان بر اعتبار سنجی در زمان submit مصر هستید، فقط دو راه میماند. (که به نظر شخصی من هیچ کدام مثل همان اولی نیستند)
1- اعتبار سنجی را در هم onchange انجام دهید و مثلاً متغییر m_Validate را تنظیم کنید ولی پیغامی نشان ندهید.
بعد در submit بیایید و بسته به مقدار m_Validate که قبلاً اعتبار سنجی شده، یا اجازه را صادر کنید یا پیغام مربوطه را alert کنید.
در ظاهر همان است که شما میخواهید، کاربر هم چیزی متوجه نمیشود و فکر نکنم برایش فرقی کند.

2-راهی که اصلاً جالب و پسندیده نیست ولی شما که هیچ طوری راضی نمیشود!!!!
مجبوراً به دلیل عدم رضایت شما، بیایید و بعد از send یک حلقه بگذارید و آنقدر ریسمان را بلوکه کنید تا onreadystatechange اتفاق بیافتد و متغییری را true کند و ریسمان اصلی که در حلقه گیر کرده بود، آزاد شود و مابقی کد را پیگیر کند.
یعنی ریسمان اصلی را دستی تا اتفاق افتادن onreadystatechange بلوکه کنید.
البته با فرض اینکه انشا ا... اگر خدا بخواهد onreadystatechange اتفاق خواهد افتاد و گرنه که .... حداقل میتوانید یک timeout ای برای این انتظار مشخص کنید.

موفق باشید. :20:

milad_66
21-08-2008, 17:04
سلام
تمام نوشته هاي شما رو براي اينكه از onblure يا onchange استفاده كنم رو قبول دارم
ببينيد من 4 تا فيلد نام سرور, نام ديتابيس, يوزر نيم و پسورد دارم
يه وليدت براي اين فيلد ها اينه كه بيام تك تك فيلد هارو چك كنم ببينم آيا خاليه يا نه ( يه وليدت خيلي ساده ) خوب توي اين جور موقع ها اگه بخوام از onsubmit استفاده كنم معملومه كه با توجه به دلايلي كه گفتين كار نا بجايي انجام دادم و بهترين ايونت جهت وليدت كردن onblur يا امثال اينه.
حالا يه وليدت ديگه دارم. اينه كه 4 تا مقدار بالا رو داشته باشم بعد با اين 4 تا مقدار به ديتابيس MySQL وصل شم. اگه ديتابيس ارور بده با توجه به شماره ارور ( مثلا 2005 مربوط به اينه كه نام سرور اشتباهه ) براي كاربر خطا بگيرم نه اگه MySQl هيچ اروري نده و به راحتي بتونم بهش وصل شم بذارم كاربر بقيه كارش رو انجام بده. ( اينجا منظور از كاربر admin هستش كه قراره براي اولين بار برنامه رو نصب كنه ). دليل اصرار من براي استفاده از ايونت onsubmit همينه. ( چون مقادير 4 فيلد به هم وابسته اند ). فكر كنم با اين حسابي كه شما مي گين غير اون دو روش امكان ديگه اي وجود نداره مجبور باشم براي اين قسمت از خير ajax بگذرم و بذارم توي همون سمت سرور كار انجام شه!
يه سوال ديگه!
فرض كنيد كار وليدت با ajax انجام ميشه. حالا به دليلي كه ممكنه كاربر بياد و جاوا اسكريپتشو غير فعال كنه ميام يه وليديتم با زبان سمت سرور مي نويسيم كه اين وليدت توي اون صفحه اي كه توي قسمت action فرم نوشتيم انجام ميشه . دوباره فرض كنيد كه كار اين دو تا وليدت با هم يكي. حالا كاربري كه جاوا اسكريپتشم فعاله مياد فرم رو پر مي كنه و با ajax بررسي ميشه مي بينيم كه همه چيز درسته و كاربر حالا اجازه داره كه submit رو بزنه. حالا با توجه به اينكه كار هر دو وليدت ajax و زبان سمت سرور يكيه ميشه كاري كرد كه بگه با توجه به اينكه كار وليدت كردن كاربر با ajax انجام شده ديگه با زبان سمت سرور انجام نشه؟ البته اين سوال از رو كنجكاويه!

_H2_
21-08-2008, 23:56
سلام
..چون مقادير 4 فيلد به هم وابسته اند..همچنان میشود کار را به زمان submit محول نکرد ولی صلاح مملکت خیش ....

در مورد سوال دومتان هم:
مرسوم است که یک اعتبار سنجی را در کلاینت و سرور با هم انجام دهند، البته در مورد کار شما که میخواهید مدیر را به دیتابیس وصل کنید، بالاخره باید عملاً یک بار در سرور تست انجام دهید.
ولی بهرحال اگر میخواهید دو تست انجام ندهید، میتوانید، فعال بودن js را در کلاینت را چک کنید و برای اجرای کد اعتبار سنجی در سرور تصمیم بگیرید.

milad_66
22-08-2008, 10:34
سلامهمچنان میشود کار را به زمان submit محول نکرد ولی صلاح مملکت خیش ....


ممكنه در اين مورد توضيح بدين؟ من يه كمي روش فكر كردم كه ببينم هر وقت مقدار 4 فيلد پر باشه به ديتابيس وصل شم و بقيه ي ماجرا ولي ديدم برنامه اش خيلي ميشه و به نظرم اومد كه زياد بهينه نيست.

_H2_
23-08-2008, 18:58
سلام
شاید، احتمال دارد، اگر من بودم، رویداد تغییر هر چهارتا را به یک تابع ارجاع میدادم که ان تابع همه را چک کند ولی به شرطی عملیان چک کردن را انجام دهد که هر چهار فیلد پر شده باشند و خالی نباشند.

با این شرط آخری درخواست فقط در مواقعی فرستاده میشود که هر چهر فیلد پر شده باشند، البته اگر کاربر پشیمان شود و برگردد فیلدها را ویرایش کند، درخواست ارسال میشود، ولی فکر نکنم در کل بار زیادی به سرور تحمیل کند.
من از mysql عزیز php کارها چیزی نمیدانم ولی فکر نکنم فقط تست برقراری یک اتصال آنهم در سرور، ایتقدرها سنگین و کند باشد.

در آخر مجدداً تاکید که شما برنامه نویس هستید و باید این را باور کنید، در نهایت شما تنها کسی هستید که میتوانید برای پروژه خود تصمیم بگیرید و این جملات صرفاً یک پیشنهاد است که میتوانید به آن فکر کنید.

موفق و پیروز و سربلند باشید.

milad_66
24-08-2008, 09:11
خيلي از راهنماييهاتون توي اين چند روز ممنونم
آخر سر اومدم اين كار رو كردم يه return false گذاشتم بعد گفتم اگه اروري وجود نداشته باشه بياد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید كنه