PDA

View Full Version : سوال: ميشه بگيد مشكل اين كد ها چيه؟



mehdimalek
سه شنبه 14 مهر 1388, 19:35 عصر
اول بگذاريد در مورد كد توضيح بدم:
كد:

<html>
<head>
<title>INDEX</title>
<script language="javascript">
function write_script(){
ll=document.createElement('script');
ll.setAttribute('language','javascript');
ll.setAttribute('src','http://localhost/twe.js');
div1.appendChild(ll);
}
</script>
</head>
<body>
<p><input type="button" name="b1" id="bt1" onclick="write_script();" value=" OK " /></p><hr />
<iframe name="ifr1" id="ifr1" src="http://localhost/anl.php" style="border:1px solid #4545FF" width="298" height="103" scrolling="no" border="0" frameborder="0">
</iframe><hr /><br/>
<div name="div1" id="div1">DIV1</div><hr/>
<div name="div2" id="div2">DIV2</div>
</body>
</html>

در كد بالا با زدن دكمه تابع write_script اجرا ميشه و با استفاده از DOM يك اسكريپت با آدرس http://localhost /twe.js در لايه div1 قرار ميگيره! من با لوكال اين برنامه رو امتحان كردم و جواب داده و خوب هم جواب داده اما مشكل اينه كه وقتي صفحه load ميشه توسط آي فريمي كه داخل صفحه است anl.php فراخواني شده كه كد anl.php به صورت زير است:

<?php
$Rand=rand(1,2);
if($Rand==1){
$SCT="RD=Math.floor(Math.random()*1000)+\" (1) \";
RD+=Math.floor(Math.random()*1000)+\" (2) \";
document.getElementById('div2').innerHTML=\"<b>\"+RD+\"</b>\";";
}else{
$SCT="LMN=Math.floor(Math.random()*1000);
LMN=\"<font face=\\\"TAHOMA\\\" size=\\\"5\\\" color=\\\"#45BB45\\\">\"+LMN+\"</font>\";
document.getElementById('div2').innerHTML=LMN;";
}
$op=fopen("twe.js","w");
fwrite($op,$SCT);
fclose($op);
echo"<b>$Rand</b><hr />";
?>

يعني خلاصه بگم كه با فراخواني anl.php دستورات داخل twe.js تغيير مي كند و دستور متفاوتي قرار ميگيرد. اما وقتي صفحه را refresh مي كنيم و محتويات twe.js تغيير مي كند زماني كه دكمه را ميزنيم تا اسكريپت اجرا شود و دستورات از twe.js خوانده شود همان دستوري كه از قبل داخل twe.js بوده اجرا مي شود و انگار نه انگار كه محتويات twe.js تغيير كرده و هر چه refresh مي كنيم همان جواب را مي گيريم!
(البته با فاير فاكس برنامه درست درست كار ميكنه اما با IE و يا اپرا مشكلي كه گفتم رو داره)
دوستان اگه ميشه كد رو با لوكال خودتون اجرا كنيد و ببينيد كه منظور من از مشكلي كه گفتم چيه و اگه هم مشكلم نامفهوم بود معذرت مي خوام. كلا ساده است شايد توضيحات من كامل نيست.
با تشكر

امیـرحسین
سه شنبه 14 مهر 1388, 21:03 عصر
اول اینکه اگر کد جاوااسکریپت جدید رو بصورت داینامیک اضافه می کنید، باید eval بکندیش تا وارد رم بشه و اجرا بشه و دوم اینکه IE و اپرا سیستم کش خیلی شدیدی دارند. کش رو خالی کنید مشکل کدهای تکراری و ندارید...

mehdimalek
شنبه 18 مهر 1388, 08:13 صبح
با تشكر از جوابتون
براي خالي كردن كش تابع clearstatcache در php وجود داره. آيا همين كافيه يا نياز به چيز ديگه اي هم داريم. آيا در جاوااسكريپت چنين امكاني براي خالي كردن كش هست؟
باز هم از توجهي كه كرديد ممنونم.:تشویق:

امیـرحسین
شنبه 18 مهر 1388, 11:50 صبح
php توابعی برای کنترل بافر داره که فکر کنم ob_flush چنین کاری انجام بده.
توی جاوااسکریپت تا جاییکه من می دونم برای خالی کردن حافظه از null کردن متغیرها استفاده می کنند...

mohsenw700
شنبه 18 مهر 1388, 18:21 عصر
امیر حسین جان بعید میدونم ob_flush بتونه کاری انجام بدن
از ob_flush برای ایجاد بافر استفاده میکنند فکر کنم

فکر کنم همان کدهای HTML بهتره باشن
اما در جاوا اسکریپت فکر کنم نال کردن کار بهتری باشه و در ضمن سعی کنید متغرهای گلوبال استفاده نکنید

از فکر من این برمیامد

امیـرحسین
یک شنبه 19 مهر 1388, 03:12 صبح
من با توابع بافر آشنایی زیادی ندارم. فکر کنم ob_end_flush باشه که اطلاعات رو ارسال می کنه و بافر رو خالی می کنه....