PDA

View Full Version : مبتدی: مشکل به روز رسانی اطلاعات با ajax



54m4n3h
یک شنبه 04 اردیبهشت 1390, 21:55 عصر
من دارم اولین پروژه م رو با php انجام میدم!
به یه مشکلی برخوردم!

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

کاری که من انجام دادم:
یه صفحه دارم که توش یه بخش هست که کاربر اطلاعات رو ویرایش میکنه و بعد با استفاده از ajax اطلاعات این بخش رو می فرستم به سرور و توی تابع open میگم که دوباره همون بخش رو توی صفحه ی اصلی لود کن!

مشکل:
این کار فقط یک بار به صورت صحیح انجام میشه! یعنی دفعه ی اول که ویرایش انجام میشه همه چیز درست کار میکنه، اما برای دفعات بعد، valueی همه ی textboxها همون valueهایی هست که بعد اولین ثبت تغییرات بوده! یعنی میشه محتویات textboxها رو تغییر داد ولی valueشون تغییر نمیکنه!!!


function update_profile(user, fn, ln, add, tel, mob, em, ed)
{
var xmlhttp;
if (window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

var query_string = "?user="+ user + "&fn=" + fn + "&ln=" + ln + "&add=" + add + "&tel=" + tel + "&mob=" + mob + "&em=" + em + "&ed=" + ed;
xmlhttp.open("GET", "profile.php" + query_string, true);
xmlhttp.send();

xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
document.getElementById("content").innerHTML = xmlhttp.responseText;
}
}

ArtMiz
دوشنبه 05 اردیبهشت 1390, 00:26 صبح
فكر ميكنم مشكل از اينه كه اطلاعاتتون كش ميشه، اين كد رو در صفحه ايجكس استفاده كن ببين درست ميشه.

header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

ahmad.khaliq
دوشنبه 05 اردیبهشت 1390, 01:30 صبح
من هم فکر میکنم مشکل شما اینه که اطلاعات کش میشه. بهترین راه حل اینه که یک متقیر بلااستفاده به آدرس صفحه اضافه کنید

به عنوان مثال وقتی میخوای فایل profile.php رو فراخوانی کنی، یک متغر time بهش اضافه کن که شکل آدرس هربار تغییرر کنه و کش نشه. مثلا profile.php?time=12392920
برای این کار هم میتونی از php استفاده کنی


profile.php?time=<?php echo time() ?>

54m4n3h
دوشنبه 05 اردیبهشت 1390, 07:52 صبح
ممنون از پاسخ هاتون، اما مشکل این نیست که اطلاعات کش میشه! (این روش ها رو تست کردم، نتیجه نداد :( )

یه جورایی انگار وقتی بار دوم صفحه لود میشه، یه instance دیگه از صفحه هست که اومده روی صفحه ی قبل!!! نمی دونم! من زیاد وب کار نکردم!

مثلاً برای من برای این که بفهمم مشکل از کجاست این کار رو کردم:
یه Textbox به اسم address دارم که به صورت زیر هست و برای event کلیکش گذاشتم که valueی آدرس رو نشون بده :


<input type="text" name="address" id="address" value="<?php echo $P_address;?>" onclick="alert(address.value);"/>

بار اول همه چیز درست کار میکنه یعنی مقداری که alert نشون میده دقیقاً همون مقداری هست که توی textbox هست!
اما بعد از یک بار فرستاده شدن اطلاعات، دیگه valueی address همونی که بود باقی میمونه!! مثلاً اگه مقداری که قبلاً برای آدرس به سرور فرستاده شده بوده، x بوده باشه، و من توی textbox بنویسم y اون وقت alert همچنان x رو نشون میده!!! در حالی که توی textbox آدرس نوشته شده y!
نمی دونم چه طور باید این مشکل رو حل کنم!!

54m4n3h
دوشنبه 05 اردیبهشت 1390, 21:37 عصر
خب من مشکلم حل شد!
مشکل از این جا بود که من محتویات textboxها رو با txt_name.value میگرفتم! اما وقتی مقدارشون رو با document.getElementById("txtID").value گرفتم، مشکل حل شد! زیاد متوجه نشدم چرا! اما خب حل شد!
هنوز زیاد با روحیات php آشنا نیستم!!