ورود

View Full Version : برای اونهایی که با ajax مشکل دارن



امید امرایی
یک شنبه 13 مرداد 1387, 22:24 عصر
این کلاس (البته با مفهوم جاوا اسکریپتی) یک اسکریپت کاملا ساده با یک دستورالعمل ساده تره که بنده برای سایت خودم نوشته بودم و بهتر دیدم برای استفاده از تکنولوژی اِی جکس و دوستانی که با این قضیه یه خورده مشکل دارن در اختیار شما عزیزان قرار بدم.
گذشته از این استفاده از این کلاس می تونه بصورت چشم گیری به کاهش حجم اسکریپت های شما , خوانایی بهتر و اشکال زدایی راحت تر کمک کنه .

روش استفاده از کلاس :

1- ابتدا اسکریپت رو به سایت خودتون import کنید : برای این کار می تونید فایل رو از این آدرس (http://www.kassit.com/RemoteScripts/XHRConn.zip) دانلود کنید و از سیستم محلی خودتون import کنید و یا از سرور کاسیت بگیرید با قراردادن


<script type="text/javascript" language="JavaScript" src="http://www.kassit.com/RemoteScripts/XHRConn.js"></script>
در تگ هد اونو import کنید . مزیت روش دوم اینه که بنده برای راحتتر شدن دوستان این اسکریپت رو آپدیت , ارتقا رفع اشکال می کنم و هر چند وقت یک بار برای دانلود می زارم با این روش دیگه نیازی به دانلود و آپدیت مجدد ندارید . از اونجایی که سورس این فایل رو هم به راحتی می شه دید از نظر امنیتی هم مشکلی ایجاد نخواهد کرد.

2- یک نمونه از کلاس رو ایجاد کنید:


var MyAjaxConn = new XHRConn();
3- اطلاعات رو از طریق تابع send ارسال کنید:


MyAjaxConn.send(Url , Data,
function(Response,CallerObject){
//این قسمت پس از بازگشت اطلاعات اجرا می شه
},
this
);
این تابع 4 آرگومان می گیره : send (core,data,Function,Object)
1) اولین آرگومان یعنی پارامتر core آدرس فایلی رو مشخص می کنه که اطلاعات به اون ارسال می شن
2) آرگومان دوم اطلاعاتی هستند که با متد post ارسال می شن
3) تابعی که بعد از بازگشت اطلاعات باید اجرا بشه
4) شی ای که تابع send رو فراخوانی کرده (اختیاری)

به تابعی که شما به تابع send ارسال می کنید به صورت اتوماتیک 2 آرگومان ارسال می شه :
1) Response که اطلاعات بازگشت داده شده رو به صورت یک شی String بر می گردونه و می تونید در تابعی که ارسال می کنید ازش استفاده کنید . درواقع هر پردازشی که می خواید روی اطلاعات بازگشتی انجام بدید باید روی Response که یک شی String هستش انجام بدید

2) اگر به تابع send در آرگومان چهارم شی ای رو ارسال کردید همون شی به پارامتر CallerObject ارسال می شه و می تونید ازش استفاده کنید .

یک مثال :


var MyAjaxConn = new XHRConn();

MyAjaxConn.send('getpassword.php' , '&username=admin',
function(Response,CallerObject){
CallerObject.password = Response; //ارسال شده اند Response به getpassword.php اطلاعات بازگشت داده شده توسط
},
this
);

امید امرایی
دوشنبه 14 مرداد 1387, 14:27 عصر
دوستانی که از اسکریپت استفاده می کنند در صورتی که اشکالی می بینن و یا چیزی به نظرشون می رسه که می شه به اسکریپت اضافه کرد عنوان کنند

tanha2007
چهارشنبه 23 مرداد 1387, 16:19 عصر
سلام.
میشه لطفا یک مثال کاملتر را برای رهنمایی بیشتر قرار دهید. منظورم اینه که getpassword.php چگونه فایلی است و دارای چی محتویاتی است و هم چنان با کدام فایلی دیگری ارتباط دارد یا نه ؟

تشکر

Lagon666
چهارشنبه 23 مرداد 1387, 17:12 عصر
من زیاد با جاوا اسکریپت آشنایی ندارم. اما چند وقت پیش با استفاده از موتور های Ajax ای که از جاهای دیگه می گرفتم، تونستم برای خود یه موتور کوتاه دست و پا کنم. دوست دوست دارم شما هم ببینید و اگر مشکلی داره اعلام کنید.



function AjaxIt(data, url, what, method){
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(data);
}else if(window.ActiveXObject){
req = new ActiveXObject('Microsoft.XMLHTTP');
if (req){
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(data);
}
}
function processReqChange(){
if (req.readyState == 4){
if (req.status == 200){
eval(what);
}else{
alert('There was a problem retrieving the XML data: ' + req.responseText);
}
}
}
}نمونه:

AjaxIt('page=login', 'ajax.php', "alert(req.responseText);", 'POST');

m.hamidreza
چهارشنبه 23 مرداد 1387, 20:14 عصر
یک پیشنهاد :
سایت شما سایزش خیلی بالاست! حجم صفحه ی اصلی بالغ بر 300 کیلو بایت هست که در حدود 200KB فقط عکس داره. کمترش کنی خوب میشه....
موفق باشید.

امید امرایی
چهارشنبه 23 مرداد 1387, 20:51 عصر
سلام.
میشه لطفا یک مثال کاملتر را برای رهنمایی بیشتر قرار دهید. منظورم اینه که getpassword.php چگونه فایلی است و دارای چی محتویاتی است و هم چنان با کدام فایلی دیگری ارتباط دارد یا نه ؟

تشکر

در این برنامه اصلا مهم نیست که فایل getpassword.php چطور فایلی باشه و یا شامل چه ارتباطاتی . تنها چیزی که مهمه اینه که چه چیزی رو بازگشت می ده .

خوب شاید برای شما مفهوم Response کمی مبهم باشه . یک مثال خدمتتون عرض می کنم :
getpassword.php


echo '123456';
در واقع response یعنی هر چیزی که توسط getpassword.php به خروجی می ره یا به نمایش در میاد . این موضوع در سیستم های غیر Ajax ی هم وجود داره . وقتی شما تقاضای یک صفحه رو ارسال می کنید چیزی که به شما نمایش داده می شه همون Response گفته می شه . پس پاسخ فایل getpassword.php می شه 123456 .
برای سیستم Ajax مهم نیست که چرا و از کجا این پاسخ داده شده بلکه فقط پاسخ بازگشت داده شده گرفته می شه .
ممکنه شما پردازش های خیلی پیچیده ای انجام داده باشید و یا یک echo بسیار ساده به هر حال نتیجه پایانی رو به خروجی می فرستید

مثال عملی تر :
getpassword.php


$username = $_POST['username'];
$conn = mysql_connect('host','user','pass');
if($query = mysql_query("SELECT password FROM users WHERE username = $username" , $conn))
$password = mysql_result($query,0,'password');
else
$password = 'User_Not_Exist';

print $password;
حال صرف نظر اینکه password از کجا گرفته شده می تونیم در فایل فراخوان اینطور داشته باشیم


var MyAjaxConn = new XHRConn();

MyAjaxConn.send('getpassword.php' , '&username=admin', //POST با متد username ارسال
function(Response,CallerObject){
//ارسال شده اند Response به getpassword.php اطلاعات بازگشت داده شده توسط
if(Response != 'User_Not_Exist')
alert('Password for admin is ' + Response);
else
alert('No such user were found');
}
);

RoostaYeBekr
دوشنبه 18 آذر 1387, 17:00 عصر
پنجاه سال بعد:
ببخشید من اون آدرسی رو که توی پست اولتون فرستادید رو ، وقتی رویش کلیک می کنم ، می گوید که آن صفحه را پیدا نمی کند. می شه حالا کدش را توی این تاپیک بگذارید.

امید امرایی
شنبه 23 آذر 1387, 18:09 عصر
خوب اين پست خيلي قديميه و در حال حاضر اين برنامه به صورت يك فريم وورك منتشر شده و نسخه جديد هم در حال انتشاره به همين جهت لينك هاي پيشين منقضي شدند

اما در هر صورت مي تونيد نسخه فعلي رو در آدرس زير دانلود كنيد
http://www.kassit.com/?url=products/xhrconn

RoostaYeBekr
شنبه 23 آذر 1387, 18:43 عصر
خوب اين پست خيلي قديميه و در حال حاضر اين برنامه به صورت يك فريم وورك منتشر شده و نسخه جديد هم در حال انتشاره به همين جهت لينك هاي پيشين منقضي شدند

اما در هر صورت مي تونيد نسخه فعلي رو در آدرس زير دانلود كنيد
http://www.kassit.com/?url=products/xhrconn
با سلام
:لبخندساده:
من وقتی توی این لینک جدیدی که معرفی کردید ، می رم ، خطای زیر را دریافت می کنم:

http://www.sleezo.com/imgs/2008/dec/13/yyyy.png

امید امرایی
یک شنبه 24 آذر 1387, 13:45 عصر
بله ممکنه
ولی متاسفانه یا خوشبختانه بنده با هر مرورگر یا در هر شرایطی تست می کنم این خطا رو نمی بینم
لطفا مشخصات مرورگر و سیستم عامل خودتون رو بفرمایید

RoostaYeBekr
یک شنبه 24 آذر 1387, 16:41 عصر
بله ممکنه
ولی متاسفانه یا خوشبختانه بنده با هر مرورگر یا در هر شرایطی تست می کنم این خطا رو نمی بینم
لطفا مشخصات مرورگر و سیستم عامل خودتون رو بفرمایید
با سلام
:لبخندساده:
IE7
XP SP2
:لبخندساده:
راستش وقتی این پیغام را می دهد ، بلافاصله صفحه ی سایتتان را هم می بندد.

امید امرایی
چهارشنبه 27 آذر 1387, 16:56 عصر
بنده هرچه تست می کنم متاسفانه هیچ اشکالی نمی بینم
اما قطعا حق با شماست و ممکنه در شرایطی این خطا بروز کنه که تا این لحظه برای بنده اتفاق نیفتاده

oracle_2007
سه شنبه 03 دی 1387, 10:35 صبح
با سلام و تشكر بخاطر اين كد هايي كه گذاشتين ...
اگه ميشه لطف كنين و يه نمونه كد با asp.net هم بزارين چون من اصلا php نميدونم و اينكه ما هم بهره اي از اين مطلب مفيد شما برده باشيم ، چون ديگه از اين كنترلهاي دات نت خسته شدم و دوست دارم بدونم اون ور ماجرا چه خبره و خودم مستقيما عمل كنم .. در حال ممنون و منتظر يه مثال asp.net از شما هستم .....:بوس: