PDA

View Full Version : فراخوانی تابع ajax دررویداد onclick سابمیت فرم.



montazer12
دوشنبه 11 بهمن 1389, 01:58 صبح
من یه تابع با آژاکس نوشتم و در onblur شیی فراخوانی کردم.حالا می خوام این تابع را طوری فراخوانی کنم که مثل توابع جاوااسکریپت که مقدار true و false را برمی گردانند و اگر در onclick سابمیت فراخوانی شوند، کنترل به action نرود. من برای تابع آژاکس مقدار true یا false هم بر نگرداندم.میشه true false برگرداند؟
باید چهطور این تابع و فراخوانی آن را بنویسم که در صورت داشتن یک مقدار کنترل به action نرود؟ در onclick سابمیت که فراخوانی می کنم کار نمیکند.

hossin.esm
دوشنبه 11 بهمن 1389, 09:38 صبح
ان کار رو باید در رویداد Onsubmit فرم قرار بدی



<form action="" onsubmit="return test()">

montazer12
دوشنبه 11 بهمن 1389, 14:45 عصر
درست نمیشه. همیشه به action فرم میره و return هایی که نوشتم بی تاثیره. جای return هام رو درست نوشتم؟تابع c1():

if(xmlhttp.responseText=='1')
{

div1.innerHTML='';
return false;
}
else
{

div1.innerHTML='';
return true;
}


<form name="form1" method="post" action="c.php" onSubmit="return c1();">

من چند تابع رو می خوام در onsubmit فراخوانی کنم. میشه بنویسم:

<form name="form1" method="post" action="c.php" onSubmit="return c1();return c2();return c3();">

hossin.esm
دوشنبه 11 بهمن 1389, 14:57 عصر
if(xmlhttp.responseText=='1')
{

div1.innerHTML='';
return false;
}
else
{

div1.innerHTML='';
return true;
}



فکر کنم تابع شما همیشه مقدار true را بر میگرداند.
برای تست از alert استفاده کنید

<form name="form1" method="post" action="c.php" onSubmit="alert(c1());">





من چند تابع رو می خوام در onsubmit فراخوانی کنم. میشه بنویسم:

<form name="form1" method="post" action="c.php" onSubmit="return c1();return c2();return c3();">

فکر نکنم بشه . میتونید همه خروجی های توابع را در یک تایع تست کنید و از ان استفاده کنید

montazer12
دوشنبه 11 بهمن 1389, 15:30 عصر
وقتی تابع را alert میکنم، مینویسد: undefined .
در صورتی که در خود تابع مینویسم:

alert(xmlhttp.responseText)
درست جواب میده. یعنی همین تابع رو در onblur شی دیگه تعریف می کنم کاملا تابع درستعمل می کنه ولی در onsubmit همیشه به action میره.

hossin.esm
دوشنبه 11 بهمن 1389, 16:22 عصر
اگر میتونی کد را بزار تا ببینیم مشکل کجاست.

montazer12
سه شنبه 12 بهمن 1389, 00:43 صبح
سلام برنامه را گذاشتم. توضیحاتش را هم در فایل word قرار دادم. خیلی لطف می کنید اگر بررسی کنید.

hossin.esm
سه شنبه 12 بهمن 1389, 10:04 صبح
سلام
مشکلش را بر طرف کردم
هنگامی که در

xmlhttp.onreadystatechange=function(){return false}
تاثیری در مقدار بازگشتی تابع اصلی مثلا checksec() ندارد .

و تغییری هم در توابع ajax دادم
xmlhttp.open("GET",url,false); ( قبلا به جای true false بود)
که تا زمان تمام شدن عملیات ajax صبر کند.
بعد مقدار را بر گرداند.
فکر کنم برای اعتبار سنجی از xml و یک تابع ajax استفاده کنید بهتر است.
یکی مشکل دیگه این هست که یوزرها با پسورد یکسان در دیتابیس ذخیره نمی شود(تنظیمات دیتابیس)
و اینکه امنیت در کد php ضعیف هست.

ببخشید اگر خوب توضیح ندادم.


اگر جایی از کد مشکل داشتی مطرح کن.

montazer12
سه شنبه 12 بهمن 1389, 18:52 عصر
خیلی خیلی لطف کردید. میشه چند مورد از نکات امنیتی که باید رعایت کنم را مثال بزنید.

hossin.esm
سه شنبه 12 بهمن 1389, 19:55 عصر
یکی اینکه اطلاعات ارسالی توسط کاربر (علاوه بر چک کردن سمت کلاینت ) حتما طرف سرور چک کنید
یکی جلوکیری از حملات sql injection
برای جلوگیری میتونی از تابع mysql_real_escape_string() استفاده کنید
مثلا:

$username=mysql_real_escape_string($_POST['username2']);
بعد میتونی $username را در دستور sql به کار ببری.
و یکی دیگه تابع htmlentities() برای جلوگیری از ورود کد html و .. توسط کاربر
و ...
به نظرم یکم در مورد امنیت جستجو و مطالعه کنید.

montazer12
جمعه 20 خرداد 1390, 10:19 صبح
سلام
مشکلش را بر طرف کردم
هنگامی که در

xmlhttp.onreadystatechange=function(){return false}
تاثیری در مقدار بازگشتی تابع اصلی مثلا checksec() ندارد .

و تغییری هم در توابع ajax دادم
xmlhttp.open("GET",url,false); ( قبلا به جای true false بود)
که تا زمان تمام شدن عملیات ajax صبر کند.
بعد مقدار را بر گرداند.
فکر کنم برای اعتبار سنجی از xml و یک تابع ajax استفاده کنید بهتر است.
یکی مشکل دیگه این هست که یوزرها با پسورد یکسان در دیتابیس ذخیره نمی شود(تنظیمات دیتابیس)
و اینکه امنیت در کد php ضعیف هست.

ببخشید اگر خوب توضیح ندادم.


اگر جایی از کد مشکل داشتی مطرح کن.
با تشکر
ببخشید این کدی که شما درستش کردید در فایر فوکس کار نمیکند. میشه لطفا بگید اشکال کجاست؟

hossin.esm
سه شنبه 24 خرداد 1390, 08:15 صبح
سلام
من با نسخه 4 و 3.5 کار کردم مشکلی نداست
شما از چه نسخه ای استفاده میکنید.

montazer12
سه شنبه 24 خرداد 1390, 12:30 عصر
سلام
من با نسخه 4 و 3.5 کار کردم مشکلی نداست
شما از چه نسخه ای استفاده میکنید.

با تشکر فراوان
ورژن 3.6.17
به اکشن نمیرود.
onblur ها هم کار نمیکند.

--------------------------------------------

فایرفوکس 4.0.1 نصب کردم درست شد.

hossin.esm
چهارشنبه 25 خرداد 1390, 08:05 صبح
سلام
حق با شماست. فایر فاکس نسخه 3 کار نمیکند.
از اینکه دیر جواب دادم شرمنده ام . گرفتار بودم
اما یک تغییراتی در کد ها دادم (کامل نیست).
یک فایل checkall.php ایجاد کردم که تمام مشخصات را چک میکند و بعد به صورت json به فایل مبدا ارسال میشود (شما میتونید به جای json از xml هم استفاده کنید)
یک تابع checkall در فایل ozviat ایجاد کردم که فایل checkall.php را باajax فراخوانی میکند. و اگر اطلاعات درست بود فرم ارسال میشه .
البته یک تغییرات کوچکی هم در فایل checkcode.php دادم .
در ضمن کد های xmlhttp.open("GET",url,false); را با xmlhttp.open("GET",url,true); جایگزین کردم.
کد ها را ضمیمه کردم.