PDA

View Full Version : سوال: چگونه حرکت بین صفحات را آجاکسی انجام بدهم؟ اگه کسی اطلاعاتی داره کمک کنه.



Mostafa_Sabeti
چهارشنبه 15 دی 1389, 13:24 عصر
چطور میتونم کاری کنم که حرکت بین صفحات یک سایت بصورت آجاکسی صورت بگیره؟؟؟
یعنی مثلا اگر کاربری در صفحه اول سایت بود با کلیک روی لینک درباره ما بصورت
<a href=about.aspx< درباره ما </a>
صفحه رفرش نشود.
المانهای صفحه اصلی غیرفعال شده و یک waiting وسط صفحه ظاهر شده و در این حالت بماند تا صفحه درباره ما لود شده و نمایش داده شود.
مثل کاری که بعضی نرم افزارهای مدیریتی (مثل plesk بعنوان کنترل پانل هاست ها)میکنند.

zahraghoalmi11
چهارشنبه 15 دی 1389, 14:11 عصر
سلام
شاید کوچکتر از این باشم که جوابتون رو بدم.
ولی یه جایی دیدم که با شیئ updatepanel در تب ajax extention این کار رو کرده بود
در ضمن شاید با iframe هم مشکلتون حل بشه.

Mostafa_Sabeti
جمعه 17 دی 1389, 10:08 صبح
zahraghoalmi11 (http://barnamenevis.org/member.php?134786-zahraghoalmi11) ممنون از پستتون.
کسی نظر حرفه ای تری نداره؟؟؟

prankster
جمعه 17 دی 1389, 11:27 صبح
در خیلی از موارد از iframe یا frameset و frame استفاده می کنند، مثل Plesk که از frame برای refresh کردن قسمتی از صفحه استفاده می کند.
غیر از frame ها از XHR هم می توان برای load کردن تمام یا قسمتی از صفحات استفاده کرد:

var xhr = new XMLHttpRequest();
xhr.open("GET", "About.aspx", true);
xhr.send();

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

دو نکته در این روش وجود دارد، اول اینکه در صفحه مرجع (about.aspx) نباید از tag های html، head، script و... استفاده کرد، درست مثل صفحه ای که از master page استفاده می کند، سعی کنید در صفحه مرجع فقط قسمتی از کد html قرار گیرد که می خواهید آنرا دینامیک load کنید. و دوم اینکه در صفحه مبدا باید یک html tag مثلا با نام container تعریف کنید که کلیه صفحات درون آن load شوند.
در نهایت اگر صفحات مختلف هر کدام دارای ویژگی های منحصر به فرد، با script های منحصر به فرد هستند استفاده از iframe بسیار کارآمد تر است. اصولا استفاده از XHR برای مواردی که قسمتی از یک وبسایت بروز می شود روش مناسبی است

ali_mnkt
جمعه 17 دی 1389, 11:54 صبح
می تونی از jquery و javascript استفاده کنی یه search در gooogle بزنی نمونه های خوبی پیدا می کنی

ricky22
جمعه 17 دی 1389, 12:28 عصر
سلام.
http://api.jquery.com/load/

mehrdad201
جمعه 17 دی 1389, 16:04 عصر
prankster (http://barnamenevis.org/member.php?99289-prankster) عزیز

ضمن تشکر از شما که همیشه به همه کمک میکند و راهنماییمون میکنید میخواستم مساله ای رو عرض کنم

در خصوص لود حق باشماست. حتی وقتی از .load در jquery هم استفاده میشه فقط تگ های html میاد و تگ های اسکریپت باهاش لود نمیشن.

میخواستم ببنم راهی هست که بشه ران تایم تگهای اسکریپت رو اینکلود کرد. (منظورم اجاکسی هست نه از طریق رویداد پست بک)

prankster
جمعه 17 دی 1389, 16:57 عصر
سلام
متاسفانه خیر، از طریق AJAX نمی توان script ها را برگزاری کرد! XMLHttpRequet هسته اصلی AJAX در browser ها است، اما این object اطلاعات را به صورت Text بارگزاری می کند که درون browser اصطلاحا render می شوند، این درحالی است هنگامی که صفحات به صورت عادی بارگزاری می شوند، tag های script بارگزاری و سپس *اجرا* می شوند در حالی که Text ارسال شده توسط HMLHttpRequest تنها در browser می تواند render شود
تنها راه Load کردن script ها به صورت دینامیک، این است که پس از load شدن صفحه script ها را هم به صورت dynamic بارگزاری و به صفحه اضافه کنید:

function LoadJS(id, url) {
if ((!document.getElementById(id))) {
var head = document.getElementsByTagName('HEAD')[0];
var script = document.createElement("script");
script.language = "javascript";
script.type = "text/javascript";
script.id = id;
script.src = url;
head.appendChild(script);
}
};در هر حال باز هم به نظر من استفاده از XHR برای Load کردن کل یک صفحه شامل اجزای مختلف خیلی خوب نیست، استفاده از iframe روش بسیار بهتری است

Mostafa_Sabeti
شنبه 18 دی 1389, 08:37 صبح
خوب اگه اسکریپت ها را داخل تگ html بگذاریم فکر کنم باز هم لود بشوند. این طور نیست؟
در ضمن من XMLHttpRequest را تست کردم ظاهرا اطلاعات لود شده را کش میکنه. یعنی وقتی یک درخواست را فرستاد با ارسال درخواست تکراری عملی انجام نمیشه.
این درسته یا من اشتباه میکنم؟

raziee
شنبه 18 دی 1389, 09:07 صبح
در ضمن من XMLHttpRequest را تست کردم ظاهرا اطلاعات لود شده را کش میکنه. یعنی وقتی یک درخواست را فرستاد با ارسال درخواست تکراری عملی انجام نمیشه.
این درسته یا من اشتباه میکنم؟
بله این موضوع درست هست.
در صورت نیاز به URL خود یک Query String اضافه کنید(مثلا TimeSpan) تا یک URL جدید داشته باشید.

ولی یه جایی دیدم که با شیئ updatepanel در تب ajax extention این کار رو کرده بود
استفاده از شیء UpdatePanel برای بارگذاری کامل صفحه یک فاجعه است. به طور کلی زیاد از این شیء استفاده نکنید.


در خصوص لود حق باشماست. حتی وقتی از .load در jquery هم استفاده میشه فقط تگ های html میاد و تگ های اسکریپت باهاش لود نمیشن.
میتونید کد های JavaScript خود را بعد از لود شدند فرا خوانی کنید. به این صورت مشکلی بوجود نخواهد آمد.

mehrdad201
شنبه 18 دی 1389, 10:42 صبح
البته فکر کنم jquery یه پراپرتی داره برای اینکه حالت caching رو غیر فعال کنیم.

Mostafa_Sabeti
شنبه 18 دی 1389, 16:43 عصر
اگه من روی یک فرم یک گرید ویو داشته باشم که کاربر با زدن کلیدهای بالا و پایین ماوس روی سطرها حرکت کنه و اطلاعات دیگه ای را از جدولی دیگر که با یک کلید خارجی به جدول اول متصل هست را بخواند.
آنوقت چه راهی است که با رفتن روی سطرها حتما عمل request انجام بشه.
درحالت عادی اگه کاربری دکمه پایین را بزند و روی سطر دوم بیاید، درخواست مربوطه به همراه یک کوئری استرینگ که شامل کد شناسائی سطر اول است ارسال میشود مثلا به آدرس default.aspx?personID=11 و مثلا پنج سطر را از جدولی دیگر که مربوط به عضو شماره 11 است میخواند.
حالا اگر کاربر دکمه بالا و سپس دوباره پایین را بزند دوباره درخواست مذکور به آدرس default.aspx?personID=11 باید فرستاده شود ولی عملا این اتفاق نمی افتد و همان اطلاعاتی را که از آدرس فوق گرفته دوباره برمیگرداند.
چطور میشود این حالت کشینگ را غیرفعال کرد؟ (با کد توضیح دهید لطفا)

hesamsalehnamadi
شنبه 18 دی 1389, 20:35 عصر
من یه نمونه برات آپلود کردم میتونی از آدرس زیر ورداریش

فقط یه مشکل : وقتی برنامه رو اجرا کردی برو تو قسمت پروژه های دانشجویی یه دکمه برات نشون میده روش کلیک کنی میبینی که یه پیغام خطا میده اگه آقایون یه نگاهی بندازین این مشکل حل بشه بد نیست ..

اگه چاره شو پیدا کردی همینجا آپ کن تا بقیه هم استفاده کنن.


از آدرس زیر دانلود کن :



http://www.mediafire.com/?5wexw9ee181iq7r
http://www.mediafire.com/?5wexw9ee181iq7r