PDA

View Full Version : مشکل با Timeout توی Jquery



sonixax
سه شنبه 27 بهمن 1388, 18:15 عصر
سلام اگر میشه به من بگید چرا من وقتی تایم آوت رو ست میکنم دیگه نمیتونم پاکش کنم ؟




<html>
<head>
<title>jQuery - Ajax dynamic content loading</title>
<script src="jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
function loadC(id) {
var timer = setTimeout('alert("Hallo")' , 3000);
$("#contentArea").load("rpc.php",{o: id});
}


</script>
</head>
<body onLoad="loadC(1);">

<!-- Navigation, can't be bothered to do floats! -->
<a href="javascript:loadC(1);">Tab 1</a> |
<a href="javascript:loadC(2);">Tab 2</a> |
<a href="javascript:loadC(3);">Tab 3</a> |
<a href="javascript:loadC(999);">This content doesn't exist</a>

<div id="contentArea" style="margin: 20px 0px 10px 10px; border: 1px solid #CCC;">
&nbsp;
</div>

</body>
</html>



این هم طرف PHP :




<?php

$cOption = $_POST['o'];

switch($cOption) {
case 1:
echo 'tab 1';
break;
case 2:
echo 'tab 2';
break;
case 3:
echo 'tab 3

<script type="text/javascript">
clearTimeout(timer);
</script>

';
break;
default:
echo 'empty';
}

?>



فایل Jquerry ولی باید اسمش عوض بشه : http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

من توی جاوا اسکریپت خیلی خیل بیل میرم :) یعنی در همین حد بالا بلدم ، اگر میشه کمکم کنید که برای این اسکریپت یه طوری TimeOut تعریف کنم ، که اگر کانتنت لود نشد یا یه متغیر خاصی اون طرف لود نشد یعنی اون نتیجه ای که من میخوام رو نداد TimeOut بده !

درست نمیدونم کجاش گند زدم :لبخند:

خیلی مرسی .

امیـرحسین
سه شنبه 27 بهمن 1388, 22:48 عصر
هر timeout یه مشخصه داره که توسط تابع clearTimeout میشه متوقفش کرد.
این صفحه رو مطالعه کنید: JavaScript Timing Events (http://www.w3schools.com/js/js_timing.asp)

sonixax
سه شنبه 27 بهمن 1388, 23:24 عصر
خیلی ممنون ، ولی من هنوز هم نفهمیدم که وقتی کانتنت صفحه PHP لود شد چه طوری TimeOut رو پاک کنم !

در استفاده از تابع ClearTimeout مشکلی ندارم ، نمیدونم چه طوری به این حالی کنم که الان محتوایی که لازم دارم درست لود شده و این تابع فراخوانی بشه !

امیـرحسین
چهارشنبه 28 بهمن 1388, 00:27 صبح
متد load در jQuery یه پارامتر سوم هم میگیره که یه تابع است. این تابع بعد از لود موفقیت آمیز اجرا میشه. شما باید اونجا هر عملیاتی که لازم دارید رو انجام بدید.
$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});

sonixax
پنج شنبه 29 بهمن 1388, 01:04 صبح
متد load در jQuery یه پارامتر سوم هم میگیره که یه تابع است. این تابع بعد از لود موفقیت آمیز اجرا میشه. شما باید اونجا هر عملیاتی که لازم دارید رو انجام بدید.
$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});


:قلب: :قلب: خیلی ممنون .

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

یه خواهشی هم داشتم ، میشه برام توضیح بدید ResponseText و TextStatus چه طوری کار میکنند و چیچی هستند ؟

امیـرحسین
پنج شنبه 29 بهمن 1388, 21:22 عصر
jquery manual chm (http://www.google.com/search?q=jquery+manual+chm)

برای آشنایی با آژاکس می تونید این مطلب رو مطالعه کنید: http://boplo.ir/web-design/ajax-learn-tutorial

sonixax
یک شنبه 09 خرداد 1389, 18:26 عصر
jquery manual chm (http://www.google.com/search?q=jquery+manual+chm)

برای آشنایی با آژاکس می تونید این مطلب رو مطالعه کنید: http://boplo.ir/web-design/ajax-learn-tutorial

سلام ، خیلی لینکی که دادید کمکم کرد ، و بند هم پلاگینم رو با موفقیت نوشتم و تمام شد و درست و حسابی کار میکرد مثل هلو تا اینکه یکی از دوستان در صفحه خودش همزمان از Prototype هم استفاده میکنه و اونجا دیگه پلاگین من از کار میوفته ! و وقتی که پروتوتایپ رو حذف میکنم درست میشه ولی از اون طرف اون یکی امکان سایت از کار میوفته ! چه طوری میتونم این مشکل رو برطرف کنم ؟

sonixax
یک شنبه 09 خرداد 1389, 18:35 عصر
راستی این اسکریپتی هست که من نوشتمش با کمک Jquery :


<script src="../../plugins/forumthanks/js/jquery.js (http://www.barnamenevis.org/forum/view-source:http://traxtorchi.ir/plugins/forumthanks/js/jquery.js)"></script>
</script>
<script type="text/javascript">

var show_loading;
var loadErrortext;
var thankbutton;

function make_ajax_thanks(post_id,post_owner) {

var thank_timer = setTimeout("alert('زمان لازم برای بررسی اطلاعات سپری شد ، دوباره سعی کنید !')", 30000);

show_loading = "<img src='../../plugins/forumthanks/user_images/loading/rotation_red.gif'> <img src='../../plugins/forumthanks/user_images/thank/thanks.png'>" ;

document.getElementById("exp_thank_btn_div_" + post_id).innerHTML=show_loading;

$("#exp_thanks_" + post_id).load("../../plugins/forumthanks/thanks.php?thank." + post_id + "." + post_owner,{ajax_thank : 1},function (responseText, textStatus, XMLHttpRequest) {

if (textStatus == "success") {

clearTimeout(thank_timer);

document.getElementById("exp_thank_btn_div_" + post_id).innerHTML= " ";

}
if (textStatus == "error") {

loadErrortext = "خطا ! دوباره سعی کنید&nbsp; : &nbsp;";

thankbutton = loadErrortext + "<a href=" + "../../plugins/forumthanks/thanks.php?thank." + post_id + "." + post_owner + " onclick='make_ajax_thanks(" + post_id + "," + post_owner + "); return false;'><img src='../../plugins/forumthanks/user_images/thank/thanks.png'> </a>";

document.getElementById("exp_thank_btn_div_" + post_id).innerHTML=thankbutton;

}
});

}

function remove_ajax_thanks(post_id,thank_id,post_owner) {

var rem_timer = setTimeout("alert('زمان لازم برای بررسی اطلاعات سپری شد ، دوباره سعی کنید !')", 30000);

show_loading = "<img src='../../plugins/forumthanks/user_images/loading/rotation_red.gif'> تشکر من را پاک کن" ;

document.getElementById("rem_thank_btn_div_" + post_id).innerHTML=show_loading;

$("#exp_thanks_" + post_id).load("../../plugins/forumthanks/thanks.php?remove." + post_id + "." + thank_id,{ajax_thank : 1},function (responseText, textStatus, XMLHttpRequest) {

if (textStatus == "success") {

thankbutton = "<a href=" + "../../plugins/forumthanks/thanks.php?thank." + post_id + "." + post_owner + " onclick='make_ajax_thanks(" + post_id + "," + post_owner + "); return false;'><img src='../../plugins/forumthanks/user_images/thank/thanks.png'> </a>";

clearTimeout(rem_timer);

document.getElementById("exp_thank_btn_div_" + post_id).innerHTML=thankbutton;

if(document.getElementById("rem_thank_btn_div_" + post_id))
{
document.getElementById("rem_thank_btn_div_" + post_id).innerHTML= " ";
}
}
if (textStatus == "error") {

loadErrortext = "خطا ! دوباره سعی کنید&nbsp; : &nbsp;";

thankbutton = loadErrortext + "<a href=" + "../../plugins/forumthanks/thanks.php?remove." + post_id + "." + thank_id + " onclick='remove_ajax_thanks(" + post_id + "," + thank_id + "); return false;'>تشکر من را پاک کن </a>";

document.getElementById("rem_thank_btn_div_" + post_id).innerHTML=thankbutton;

}
});

}

</script>

اون یک تیکه مربوطه به Jquery رو چه طوری میتونم با یک اسکریپت دیگه جایگزین کنم که وابسته به Framework خاصی نباشه ؟

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

امیـرحسین
یک شنبه 09 خرداد 1389, 21:52 عصر
برای برطرف کردن مشکل conflict با prototype به این آدرس برید: Using jQuery with Other Libraries (http://docs.jquery.com/Using_jQuery_with_Other_Libraries)

درباره کدهاتون. خب باید بجای توابع جی کوئری که استفاده کردید، کدهای دستی وارد بشه مثلا کار تابع load رو باید توسط کدهایی که برای آژاکس میسازید انجام بدید.

sonixax
یک شنبه 09 خرداد 1389, 23:22 عصر
برای برطرف کردن مشکل conflict با prototype به این آدرس برید: Using jQuery with Other Libraries (http://docs.jquery.com/Using_jQuery_with_Other_Libraries)

درباره کدهاتون. خب باید بجای توابع جی کوئری که استفاده کردید، کدهای دستی وارد بشه مثلا کار تابع load رو باید توسط کدهایی که برای آژاکس میسازید انجام بدید.

راستش من برای یک کار ساده از یک فریمورک قوی استفاده کردم ، این کار درسته یا اشتباه ؟

امیـرحسین
دوشنبه 10 خرداد 1389, 23:44 عصر
جی کوئری امکانات ویژه ای داره که بسته به سیستمتون می تونه واستون واقعا مفید باشه یا بی مورد.
برای کارهای ساده، استفاده از جی کوئری زمان لود صفحه رو طولانی تر می کنه ولی امکاناتی میده مثل امکان توسعه ساده تر در آینده باز هم بستگی به خودتون داره.
به نظر من اگر واقعا لازم نداریدش، حذفش کنید و به فکر dial-up ها باشید.