نحوه رفرش کردن محتوای یه div تگ

pix07

Member
سلام دوستان من تگ div در صفحه دارم که توی اون با یسری دستورات پی اچ پی یسری اطلاعات رو شرط چاپ میکنه
اطلاعات رو دیتا بیس دائما در حال تغیره و ممکنه یه سری از مقادیر مجوز چاپ رو پیدا کنند و یسری دیگه مجوزشون لغو شه

آیا تابعی برای رفرش کردن تگ Div وجود داره یا فقط همون روش های آجاکسی ارسال و دریافت مقادیر به یه صفحه دیگه تنها راه ؟
چون رفرش کردن تگ دی آی وی احتمالا سرعت بیشتری نسبت به اجرای یه تابع آجاکس ارسال و دریافت داره و فشار کمتری میاره ...
 

my1zarb

Member
سلام دوستان من تگ div در صفحه دارم که توی اون با یسری دستورات پی اچ پی یسری اطلاعات رو شرط چاپ میکنه
اطلاعات رو دیتا بیس دائما در حال تغیره و ممکنه یه سری از مقادیر مجوز چاپ رو پیدا کنند و یسری دیگه مجوزشون لغو شه

آیا تابعی برای رفرش کردن تگ Div وجود داره یا فقط همون روش های آجاکسی ارسال و دریافت مقادیر به یه صفحه دیگه تنها راه ؟
چون رفرش کردن تگ دی آی وی احتمالا سرعت بیشتری نسبت به اجرای یه تابع آجاکس ارسال و دریافت داره و فشار کمتری میاره ...
سلام؛
منظورتون رو خوب نرسوندید.
ولی اگه برداشت من درست باشه ، فقط همون راه Ajax هست.
 

Mohammad

Member
فکر کنم بهترینش همون ajax باشه
از هر روشی استفاده کنی بالاخره باید با سرور ارتباط برقرار کنی
 

pix07

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

توجه داشته باشد که اگه مایکر سافت یه همچین تابعی رو توی جاوا قرار میداد کلا سبک برنامه نویس آجاکس تغیر میکرد و خیلی ساده تر میشد

شاید در آینده همچین تابعی رو توی جاوا ارائه بدن
 

farik

Well-Known Member
با سلام محدد..
اول از همه یک سوال...چطوری میخواین بدون باز کردن فایل خارجی محتویات دایو رو لود کنین...تنها راهش برای اینکار اینه که از قبل اطلاعات رو تو پیج html داشته باشین...که در اون صورت هم میتونی محتویات دایو رو یا استفاده از DOM objects بروز رسانی کنین....{شایدم من منظورتون رو نفهمیدم}
دوست عزیز اگه کار با ایجکس اذیتتون میکنه میتونین از کلاس یجکسی که در همین انجمن معرفی شده استفاده کنین..یا هم از prototype و امثال اونها استفاده کنین..کار رو خیلی راحت تر میکنن...
موفق باشید..
 
آخرین ویرایش:

pix07

Member
farik جان ضمن تشکر از پیگیری شما

ببینید منظور کلی من اینه که یک صفحه html که شامل کلی تگ هست و هریک از تگ ها محتوی یکسری اطلاعات است

ما بتونیم توسط خود html یا جاوا محتوای یک تگ div رو set و unset کنیم
مثلا همونطور که ما با کلیک بروی یک دکمه submit محتوای یک فرم رو sen میکنیم .
یا بزار یه مثال دیگه بزنم مثلا یه منوی drop down یا کشوی وقتی که با یه ایونت مثل onmouseover نمایان میشه .. .

ببینید وقتی ما یه صفحه html استاتیک رو رفرش میکنیم اون صفحه حتی اگر با صفحات دیگه ای هم ارتباطی نداشته باشه در صورتی که تغیراتی در سورس اون بوجود اومده باشه اون تغیرات رو نمایان میکنه

اصلا بیخیال من راجب این موضوع حتی از جی کوری هم نگذشتم و تو فروم Jqury هم زیرو رو کردم اونجا هم به همین پاسخ رسیدم

راجب آژاکس هم یه تابع اختصاصی نوشتم. ولی مشکلی که من با آژاکس دارم فشاری هست که به تبع query های پی در پی به سرور وارد میشه .
 

eAmin

Well-Known Member
سلام
بازم نتونستید منظورتون رو خوب برسونید! بخش اول پست آخر شما، کاملا گفته هاتون رو در پستهای قبلی نقض میکنه. بزارید من یک به یک به پستهای شما جواب بدم، شاید اینطوری به نتیجه برسیم.

سلام دوستان من تگ div در صفحه دارم که توی اون با یسری دستورات پی اچ پی یسری اطلاعات رو شرط چاپ میکنه
اطلاعات رو دیتا بیس دائما در حال تغیره و ممکنه یه سری از مقادیر مجوز چاپ رو پیدا کنند و یسری دیگه مجوزشون لغو شه

آیا تابعی برای رفرش کردن تگ Div وجود داره یا فقط همون روش های آجاکسی ارسال و دریافت مقادیر به یه صفحه دیگه تنها راه ؟
چون رفرش کردن تگ دی آی وی احتمالا سرعت بیشتری نسبت به اجرای یه تابع آجاکس ارسال و دریافت داره و فشار کمتری میاره ...
اول به این سوال من شما جواب بدید: چه اطلاعاتی دقیق باید در تگ div قرار داده بشه و از کجا؟
اگر قراره این اطلاعات از سرور گرفته بشه، شما 3 تا راه دارید که می تونید از Ajax, JSONP و یا راه آخر از iframe ها استفاده کنید.

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

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

ببینید منظور کلی من اینه که یک صفحه html که شامل کلی تگ هست و هریک از تگ ها محتوی یکسری اطلاعات است
ما بتونیم توسط خود html یا جاوا محتوای یک تگ div رو set و unset کنیم
مثلا همونطور که ما با کلیک بروی یک دکمه submit محتوای یک فرم رو sen میکنیم .
یا بزار یه مثال دیگه بزنم مثلا یه منوی drop down یا کشوی وقتی که با یه ایونت مثل onmouseover نمایان میشه .. .

ببینید وقتی ما یه صفحه html استاتیک رو رفرش میکنیم اون صفحه حتی اگر با صفحات دیگه ای هم ارتباطی نداشته باشه در صورتی که تغیراتی در سورس اون بوجود اومده باشه اون تغیرات رو نمایان میکنه

اصلا بیخیال من راجب این موضوع حتی از جی کوری هم نگذشتم و تو فروم Jqury هم زیرو رو کردم اونجا هم به همین پاسخ رسیدم

راجب آژاکس هم یه تابع اختصاصی نوشتم. ولی مشکلی که من با آژاکس دارم فشاری هست که به تبع query های پی در پی به سرور وارد میشه .
این مواردی که شما گفتید رو دوستمون farik هم جواب دادن که چطور اینکار رو انجام بدید، با استفاده از DOM.
بزارید من با یک مثال به شما نشون بدم که چطور می تونیم، محتوای یک div رو set و یا unset کنیم:
کد:
var div = document.getElementById('myDiv');

// set value & save default value
div.innerHTML += '... new content added';

// set
div.innerHTML = 'new content replaced';

// unset
div.innerHTML = ''; // all contents, is removed.
متوجه شدید که ماچقدر ساده اینکار رو انجام دادیم. اگر اطلاعات استاتیک و تغییر نیافته است، از این راه بدون شک می تونید استفاده کنید. شما با Ajax هم همین کار رو انجام میدید، منتها داده های Ajax از سرور می یاد:
کد:
var staticData = 'static data...';
var dynamicData = ajax.get(url, param); // all data recieved from server.

div.innerHTML = staticData;
div.innerHTML = dynamicData;

ببخشید یک سوال:
ببینید وقتی ما یه صفحه html استاتیک رو رفرش میکنیم اون صفحه حتی اگر با صفحات دیگه ای هم ارتباطی نداشته باشه در صورتی که تغیراتی در سورس اون بوجود اومده باشه اون تغیرات رو نمایان میکنه
این یعنی چی؟ من نتونستم این جمله رو متوجه بشم!
در مورد کوئری های پی در پی هم می تونید، از cache استفاده کنید. به اینصورت که تا زمانی که اطلاعات جدیدی وارد نشده، کوئری ها بیخود اجرا نشن. در ضمن مگه چند تا کوئری همزمان اجرا میشن که شما نگران فشار به سرور هستید؟
برای به جواب رسیدن این تاپیک همه ی اینهای که گفتم نیازه:دی

پ.و: div رو دیو یا همون "دی آی وی" تلفظ کنید، دایو درست نیست.

موفق باشید.
 

pix07

Member
با تشکر از eAmin بخاطر توجه و پاسخگویی

ببینید بهتره منظور دقیقم رو اینطور بیان کنم

PHP:
<div id='onlineuser'>

<?php 
select username from users where logintime>time()-1
mysql_fetch_array(query)
echo array
?>
</div>
 

eAmin

Well-Known Member
با تشکر از eAmin بخاطر توجه و پاسخگویی

ببینید بهتره منظور دقیقم رو اینطور بیان کنم

PHP:
<div id='onlineuser'>

<?php 
select username from users where logintime>time()-1
mysql_fetch_array(query)
echo array
?>
</div>
حالا منظورتون رو گرفتم! شما می خواید با این div مثل یک صفحه جدا برخورد بشه، مثلا اینطوری:
کد:
document.getElementById('onlineuser').refresh();
که فقط کدهای سمت سرور داخل این div اجرا بشه درسته؟
اگر اینطور باشه که، اولا خب این چه کاریه، ای جکس برای همین کار اومده! دوما تکنولوژی هنوز اونقدر پیشرفت نکرده برادر! ثانیا این روش هیچ فرقی با نوع Ajax ی در فشار آوردن به سرور نداره و هردو یکسان هستند.
اگه میشد همچین کاری کرد که Ajax رو به وجود نمی آوردن! ولی اگر بشه (که غیر ممکنه) همچین کاری رو انجام داد، یک انقلاب جدیدی بوجود می یاد.
دلیل اینکه می گم غیر ممکنه این هست که، تمامی کدهای سمت سرور، در سرور پردازش میشن و هیچ چیزی به کلاینت نمایش داده نمیشه.

همین روش با استفاده از ای جکس:
PHP:
getonlineusers.php:

<?php 
select username from users where logintime>time()-1
mysql_fetch_array(query)
echo array
?>

showonusers.html:
<script type="text/javascript">

this.onload = function() {
    var onusers = ajax.get('getonlineusers.php').responseText;
    document.getElementById('onlineuser').innerHTML = onusers;
};

</script>
<div id='onlineuser'></div>
 
آخرین ویرایش:

pix07

Member
با تشکر از شما دقیقا منظورم رو خوب متوجه شدید

بله من هم همینطور فکر مکنم (اینکه واقعا یه انقلاب جدید بوجود میاد اگه همچین چیزی ایجاد بشه) خوب البته این نظر شخصیمه و نمیدونم چقدر صحیح باشه ولی این طور بنظر میرسه اگه در روش های آژاکس بجای اینکه از طریق ارسال و دریافت اطلاعات با یه فایل خارجی ، دیتا توی div بریزیم و بصورت غیر مستقیم query به سرور بفرستیم .، بیایم و با یه روش مستقیما با سرور ارتباط برقرار کنیم سرعت اجرا و دریافت دیتا بیشتر بشه

خوب اگه قطعه کد بالا رو درنظر بگیرید فکر نمیکنم با ضریب 1 ثانیه ما هرگز بتونیم اجرای خوب داشته باشیم

من این کار رو از طریق همون روش آژاکس و حتی با ضریب 5 ثانیه انجام دادم ولی خوب بعد از یک یا دوبار اجرای صحیح یک در میان یا 2 در میان response ها به خوبی لود نمیشد ممکن بود بعد از 15 ثانیه دیتا ها لود بشه و این یعنی سه دور در طی
این 15 ثانیه ما دستور آژاکس رو اجرا کردیم و در انتظار لود
response هستیم و ممکن که response ها با هم تداخل پیدا کنه
ضمن اینکه اگه ما توی قسمت های مختلف پروژه از دستورات آژاکسی استفاده کرده باشیم و همزمان بخوایم از
اونها هم استفاده کنیم ممکنه
response مربوط به بلوک کاربران آنلاین در مثلا منوی shotbox لود بشه و ما توی shotbox
متون زیر رو ببینیم :

حاضرین در سایت :
eAmin
pix07
01 . مهمان
02 .مهمان
03. booter
.
.
.
خوب برای محاسبه فشار به سرور هم در نظر بگیر همزمان مثلا 20 تا کاربر توی سایت هستن و هر کدوم هم تقریبا 5 دقیق توی سایت باشن و محتوای سایت رو مرور کنن 20 * 60 * 5 این برای وقتیه که هر کاربر توی مرورگرش تنها یه tab از صفحات سایت ما باز کرده باشه
اگه همون کاربر مثلا دوست داشته باشه 10 تا:green: tab از صفحات مختلف سایت بازکنه 5*60*20 *10 query خوب این تازه برا وقتیه که کاربر از هیچ یک از امکانات سایت که توشون آژاکس دخیل باشه استفاده نکنه ..! (بجز بلوک افراد آنلاین) خوب با یه حساب سر انگشتی ...

از شوخی گذشته .. من این روش رو با سیستم
cpu 1.4 core to solo
ram 4
cach 3
اجرا کردم بصورت شبکه با 3 سیستم همزمان وارد شدم اما نتیجه مطلوبی نداشت
البته لازم بذکره که من برای کل پروژه یه تابع آژاکس نوشتم و از همین تابع برای هر نوع عملیات آژاکسی از جمله menulist یا drop down list menu
های زنجیره ای ... استفاده کردم
لازم بذکره که برای un redy هم یه لودینگ گذاشتم
لطفان بفرمایید اینکه کلا از یه تابع استفاده کردم و لودینگ هم گذاشتم تا چه حد توی نتیجه تاثیر داره ؟
 
آخرین ویرایش:

eAmin

Well-Known Member
خب ببینید این مشکل بر می گرده به نوع الگوریتمی که شما در سمت سرور استفاده کردید و هیچ ربطی به Ajax نداره! به نظر بنده اصلا نیازی نیست که مدام آنلاین بودن کاربران چک بشه. مثلا می تونید هر 5 دقیقه یکبار اینکار رو انجام بدید. و یا در کنار دیتابیس از فایلها هم کمک بگیرید و خیلی راه های دیگه.

جریان 10 تا تب، به نظر من اولا نیازی نیست که در تمامی صفحات سایت کاربران آنلاین رو نمایش بدید (البته بستگی به نوع کاری که میخواید انجام بدید داره)، دوما شما می تونید این مشکل رو به راحتی حل کنید، یکی از آسون ترین اینها استفاده از session هست، و با قرار دادن یک شرط، چک می کنید که اگر از قبل آنلاین بود در صفحات بعدی عملیات چک کردن رو انجام نده. خلاصه خودتون باید یک روش ایده آل رو برای خودتون طراحی کنید.

در ضمن هیچ وقت اطلاعات دریافتی از Ajax از جایی که شما برای نمایش اونها تعیین کرده باشید، جابه جا نمیشن و مثلا یهویی در shotbox به نمایش در نمیان! اگر این اتفاق بیوفته مقصر شمائید نه Ajax! شما اگر درخواستهای ای جکس رو کاملا از هم تفکیک کنید، مطمئن باشید که همچین اتفاقی پیش نمیاد.

موفق باشید.
 

pix07

Member
با تشکر از شما در خصوص لیست آنلاین بودن افراد باید عنوان کنم که این لیست برای یچیزی شبیه چت روم استفاده میشه بنابرین لحظه آنلاین بودن فرد خیلی مهمه با این حساب استفاده از سشن در این مورد به این شکل که شما بیان کردید چندان کاربردی نخواهد داشت..

اما در خصوص بله حق باشماست اگر از دو تابع مجزا استفاده بشه احتمال بروز چنین خطایی نخواهد بود ..
 

farik

Well-Known Member
با سلام..
خوب بازم فرقی نمیکنه..شما هر چند دقیقه یکبار فقط کافیه یک کوئری حاوی ایدی شخص بفرستین..لازم نیست منتظر جوابش هم وایستین..بعد هم هر کس خواست افراد رو ببینه کسایی رو بهش میدی که تو 1 دقیقه قبل بهت کوئری فرستادن..این طوری بهش زیاد فشار نمیاد..
موفق باشید...
 

sharpsabre

New Member
سلام

این چطوره ؟
[PHPS]<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js">
<script type="text/javascript">
setInterval("my_function();",5000);
function my_function(){
$('#refresh').load(location.href + ' #time');
}
</script>
</head>
<body>
<div id="refresh"></div>
<div id="time">
<?php echo date('H:i:s');?>
</div>
</body>
</html>[/PHPS]
این کار می کنه ؟
 

جدیدترین ارسال ها

بالا