تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 2 از 3 اولاول 123 آخرآخر
نمايش نتايج 11 به 20 از 25

نام تاپيک: كد انجام شدن يه response

  1. #11
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    58

    پيش فرض

    سلام
    من احساس ميکنم مشکل شما با مفهوم عمليات هاي غير همزمان است يا اصطلاحاً Async .
    شما تصور صحيحي از عمليان ها ي چند ريسماني نداريد.

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

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


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

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

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

  2. #12
    حـــــرفـه ای eAmin's Avatar
    تاريخ عضويت
    Aug 2007
    محل سكونت
    Node.js
    پست ها
    2,259

    پيش فرض

    سلام.

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

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

    اگر از همون اول دقت می کردی منظور من از اول این قسمت بود!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینی که توی این تابع ما دوتا در خواست داریم، که جواب گوی سوال شما بود!
    Last edited by eAmin; 18-08-2008 at 09:16.

  3. #13
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    58

    پيش فرض

    خوب بذارين اينطوري مطرح كنم. يه فرم دارم روي رويداد 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. ولي خوب اينم نشد
    چيكار كنم؟

  4. #14
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    میدونید مشکل کجاست؟
    شما میخواهید راه بروید!
    ما میگیم، اون کفش را پایتان کنید و راه بروید! ولی شما میگویید من دستکش میخواهم که با دست هایم راه برم اگه میتونید کمکم کنید.

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


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


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

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

  5. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  6. #15
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    58

    پيش فرض

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

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

  7. #16
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    یک پیشنهاد

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

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

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

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

    خوبه؟

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

  8. #17
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    58

    پيش فرض

    سلام
    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 استفاده كنم.

  9. #18
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این هم یک نمونه جواب که خودم شخصاً تستش کردم.
    البته من نام فیلدها را با معنی تر گذاشتم و نیز دکمه submit را هم در زمان لازم فعال و غیر فعال میکنم ولی این تغییر disabled ربطی به ذات کد ندارد و اگر disabled هم تغییر نکند، باز بدون جواب صحیح submit ممکن نیست.

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

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

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

  10. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  11. #19
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    58

    پيش فرض

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

  12. #20
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    من اصلاً اصرار شما را برای اعتبار سنجی در زمان submit درک نمیکنم.
    همانوطر که گفتید عموم اعتبار سنجی ها در onchange و onblur اتفاق می افتد و هیچ مشکلی هم ندارد، این روش استاندارد و ذاتی امکانات asp.net برای اعتبار سنجی هم است.

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

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

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

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

    موفق باشید.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •