Train

PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : جی کوئری - jQuery


decoder2012
03-09-2011, 10:06 AM
در این تاپیک قصد دارم به معرفی این ابزار طراحی وب که برگرفته از جاوا اسکریپت هست بپردازیم .

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

قبل از درج پست موارد زیر رو رعایت کنید :

1- از ارسال اسپم خوداری فرمائید .

2- قبل از سوال از نبود جواب سوال خود اطمینان حاصل کنید .

3- درصورت بروز سوال آنرا به شفاف و روشن بیان کنید تا بهترین جواب را دریافت کنید .

4- درصورتیکه سوال شما در خصوص مطالب مندرج در این تاپیک می باشد ، آنرا به صورت نقل قول از تکه مطلب مورد نظر درج کنید .

5- برای تشکر هم دکمه ی تشکر کافیه ، بنابرین برای اینکار از پست استفاده نکنید .


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

منبع: [Only registered and activated users can see links]

decoder2012
03-09-2011, 10:08 AM
سالهای متمادی، جاوااسکریپت به چندش معروف بود! چون هم یادگیریش سخت بود و منبع آموزشی خوب براش کم پیدا می شد، هم کاربرد قابل قبولی براش نبود و هم باعث مشکلات امنیتی میشد.
اما با گذشت زمان، رونق گرفتن AJAX، بیشتر شدن ایده های سمت کلاینت افزایش امنیت مرورگرها که به دلیل توسعه مرورگرها بود، جاوااسکریپت خواهان بیشتری پیدا کرد.
(توسعه مرورگرها رو مدیون اتحادهای ضد اینترنت اکسپلورر هستیم که بخاطر پدرسوختگی و دشمنی با مایکروسافت، فایرفاکس رو پایه گذاری کردند مثل اپل و گوگل و اوراکل و بقیه که رشد و رقابتی شدن بازار مرورگرها رو باعث شد).
اما وقتی jQuery متولد شد، اوضاع کلی فرق کرد. jQuery گفت برای اعمال تغییر در اجزای صفحه با جاوااسکریپت، انیمیشن سازی و AJAX و غیره، نیازی به بلد بودن جاوااسکریپت نداری. من همه اش رو با یه سری توابع هلو شکل واست حل کردم اونم بصورت Cross-Browser یعنی در همه مرورگرها یه نتیجه داره!
چه حرف باحالی. ولی مگه میشه بدون بلد بودن یه زبان ازش استفاده کرد؟ راستش بله! کافیه کار با سینتکس خود jQuery رو یاد بگیریم و بعدش همه چی حله. این یادگیری فقط سه چهار ساعت (حتی کمتر) طول میکشه.
طریقه نصب و بکارگیری جی کوئری به این صورته که به سایت jQuery.com مراجعه می کنیم. آخرین نسخه اش رو داونلود می کنیم که یک فایل JS خواهد بود. این فایل رو توسط تگ ********** به صفحه اضافه می کنیم و کدهای شخصی خودمون رو هم توسط یه تگ ********** دیگه، بعد از ********** قبلی قرار میدیم.


<!DOCTYPE html>
<html>
<head>
...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
// Our jQuery codes here
</script>
...
</head>
...
</html>


یه نکته ای وجود داره بعضی جاها میگن jQuery رو بجای <HEAD>، در آخر <BODY> بذاریم. می دونی که اون فایل jquery حدود 50 کیلوبایته و وقتی در <HEAD> قرار بگیره تا کامل لود و پردازش نشه، ادامه صفحه و <BODY> نمایش داده نمیشه و برای سرعتهای پایین، مدت زمانی وجود داره که باید صفحه سفید تماشا کنند اما وقتی این فایل در آخر <BODY> بذاریم، صفحه مسلما زودتر ظاهر میشه. اما این روش استاندارد و همیشه خوبی نیست. چون اولا یه استانداردی میگه همه تگهای ********** باید در <HEAD> قرار بگیرند و دوما اینکه تصور کن ما کدهایی رو در جی کوئری نوشتیم که قراره با شروع صفحه دیده بشن و صفحه طولانی باشه اونوقت کاربر باید منتظر بمونه تا همه صفحه کامل لود شه و بعد بتونه افکتها و امکانات جی کوئری رو استفاده کنه که اصلا جالب نیست. در کل این بستگی به ساختار صفحه و سایت داره که کدوم روش براش بهتره.

decoder2012
03-09-2011, 10:57 AM
جی کوئری بر پایه اجزای DOM بنا شده (اجزا یا Elementهای DOM بصورت خیلی خلاصه، همون اجزا و تگهای موجود در صفحه است). یعنی اولین قدم استفاده ازش انتخاب و پیدا کردن بخشی از صفحه است که می خوایم باهاش کار کنیم. به این صورت که تقریبا همه توابع جی کوئری به Elementها متصل میشن.
یک تابع Global به نام jQuery وجود داره که اجزای DOM رو بهمون میده. در حالت عادی تابع $ هم وجود داره که دقیقا با تابع jQuery برابره. این تابع برای گرفتن Elementها از دو روش استفاده می کنه یه روش استفاده از Selectorهای معتبر در CSS است که جی کوئری برای این کار از یک Selector آماده(Standalone) به نام Sizzle بهره میبره. روش دوم دادن خود Elementهای جاوااسکریپت به این تابع است.
مثلا می خوایم یه <DIV> که ID به نام myDiv داره رو انتخاب کنیم:


// CSS Selectors
$('#myDiv')
jQuery('#myDiv')

// Javascript Element
$( document.getElementById('myDiv') )
jQuery( document.getElementById('myDiv') )




هر چهار خط بالا یه نتیجه داره که اون دو تا آخری جالب نیست ولی گاهی اوقات لازم میشه.
حالا Element رو پیدا کردیم و میخوایم توابعش رو استفاده کنیم. برای کسانیکه هیچی از جاوااسکریپت نمی دونن. این توابع با نقطه از هم جدا میشن. اصلی ترین تابع ready نام داره که خیلی پر کاربرده و کارش اینه که یک تابع (که ما میسازیم) رو میگیره و درست موقعیکه همه اجزای DOM کامل شناخته شدند، اجرا میشه یعنی زودترین موقعی که ما میتونیم مطمئن شیم همه تگهای موجود در صفحه رو مرورگر لود کرده و شناخته. گفته بودم که این فریم ورک به Elementها متصل میشه و این تابع هم باید به body متصل بشه. می تونیم body رو توسط Selectorها بگیریم ولی روش راحتتر استفاده از document.body است که یک مقدار استاندارد در مرورگرهاست که باید به روش دومی که بالا گفتم استفاده شه یعنی روش جاوااسکریپت:




<!DOCTYPE html>
<html>
<head>
...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document.body).ready( function() **} );
</script>
...
</head>
...
</html>




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




myFunction = function() **
// Functions codes here
}
// Or
function myFunction() **
// Functions codes here
}




و اینجوری استفاده میشن:


myFunction();




و می تونن مقادیری رو به عنوان پارامتر بگیرند:


myFunction = function(someText) **
alert( someText );
}

myFunction('Hello');
myFunction('Boplo.ir');




اینجا someText به عنوان پارامتر قرار گرفته. پارامتر هر چی می تونه باشه. حتی میتونه خودش یک تابع باشه:


myFunction1 = function() **
// Function1 codes here
}
myFunction2 = function(func) **
// Function2 codes here
}

myFunction2(myFunction1);

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


myFunction2 = function(func) **
// Function2 codes here
}

myFunction2(function() **
// Function1 codes here
});

اینجا ما خود تابع رو بجای اسمش استفاده کردیم.
اینا رو گفتم که با سینتکس جی کوئری راحتتر ارتباط برقرار کنی.
حالا برمی گردیم به همون تابع ready که بالا میبینی. این تابع هم یک تابع دیگه به عنوان پارامتر میگیره.


<!DOCTYPE html>
<html>
<head>
...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document.body).ready(function() **

alert('DOM is ready!');

});
</script>
...
</head>
...
</html>


اگه گیج شدی و چیزی متوجه نشدی، غصه نخور. می تونی شکلش رو بخاطر بسپاری و ازش استفاده کنی و به چجوریش اهمیت ندی. فقط باید به پرانتزها و آکولادهای باز و بسته دقت کنی.
به عنوان اولین مثال، جی کوئری تابعی به نام css داره که هم مقدار CSS رو میده و هم اجازه میده تغییرشون بدیم:


<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document.body).ready(function() **

alert( $('#myDiv').css('color') ); // Alerts Color
$('#myDiv').css('color', 'red'); // Changes Color

});
</script>
</head>
<body>
<div id="myDiv">I love Boplo.ir</div>
</body>
</html>


این کد اول رنگ myDiv رو alert میده و سپس رنگش رو تغییر میده و چون داره در تابع ready این کار رو می کنه، در اولین فرصت این کار رو انجام میده یعنی اگر این کد رو اجرا کنی، همون اول نوشته رو قرمز میبینی که خیلی سریع کد اجرا شده.
توابع جی کوئری رو میشه بصورت زنجیروار هم استفاده کرد. مثلا تابعی وجود داره به نام addClass که کلاس CSS رو به Element اضافه می کنه. ما میخوایم هم رنگ myDiv رو عوض کنیم و هم کلاس بهش اضافه کنیم:


<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.myClass ** font-size:20px; }
</style>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document.body).ready(function() **

$('#myDiv').css('color', 'red').addClass('myClass');

// OR
$('#myDiv').css('color', 'red');
$('#myDiv').addClass('myClass');

});
</script>
</head>
<body>
<div id="myDiv">I love Boplo.ir</div>
</body>
</html>


دو روش بالا، یعنی روش زنجیروار و روش جداگانه، یک نتیجه دارند ولی اولی سریعتره چون $ یک تابع است که یه سری عملیات انجام میده و در روش دوم ما دو بار اجراش کردیم در حالیکه داره یه کار تکراری انجام میده.

Behzad_Ps
03-09-2011, 01:17 PM
Core: شامل توابع اساسی و هسته که به بخشهای زیر تقسیم میشه:

تابع (...)$ یا تابع (...)jQuery: شامل روشهای استفاده از تابع $.

// Finds Elements using Selectors
$("div > p").css("border", "1px solid gray");

// Finds Elements using Javascrits DOM elements
$(document.body).css("background", "black");

// Creates element from HTML string and puts it in body
$("<div><p>Hello</p></div>").appendTo("body");

// Creates a function that works same as .ready()
$(function()**
// Document is ready
});

خطهای اول و دوم روشهای گرفتن اجزای صفحه هستند.
خط سوم روش ساختن Element در صفحه است که توسط تابع appendTo به صفحه اضافه شده.
خط چهارم، یک تابع به $ داده شده که کدهای این تابع در زمان تکمیل DOM اجرا میشه. این روش دقیقا مشابه استفاده از تابع ready خواهد بود که بالا توضیح دادم.
توابع مربوط به دسترسی به شیء jQuery: توابعی برای فعالیت اختصاصی با خروجی تابع $ مثل شمارش Elementهای پیدا شده، گرفتن نمونه خاصی از بین اونها، تبدیل خروجی به DOM و غیره.
توابع کنترل اطلاعات: توابعی برای ذخیره و بازیابی اطلاعات خاصی برای Elementها. مثلا من یک کلمه رو به اولین <DIV> صفحه اضافه می کنم و بعدا وقتی این <DIV> رو انتخاب کردم می تونم اون کلمه رو هم ازش بخونم (کاربرد خاص داره). این بخش توابعی هم برای کنترل عملیاتهای پست سر هم ارائه داده.
ایجاد پلاگین: دو تا تابع اساسی برای ایجاد پلاگین برای جی کوئری و توسعه اش.
تداخل: معرفی تابعی برای استفاده فریم ورکهای مختلف در صفحه بدون بوجود اومدن مشکل و تداخل به نام noConflict.

Selectors: معرفی چگونگی استفاده از Selectorهای قابل استفاده و معتبر برای
تابع $.

// Complex CSS Selectors
$('#myID > .someClass p + span , a').css('color', '#323232');

// Odd TRs
$('tr:odd').css('color', '#323232');

// Inputs which their "name" attribute is NOT equal to "email"
$("input[name!='email']").css('color', '#323232');

Attributes: امکاناتی برای دسترسی به مشخصه ها و اطلاعات Elementها مثل value، href، محتویات داخل تگ و غیره.

// Changes href of all links to "[Only registered and activated users can see links]"
$('a').attr('href', '[Only registered and activated users can see links]');

// Add "someClass" CSS class styles to Odd TRs
$('tr:odd').addClass('someClass');

// Sets 'Hello' as content of #myDiv
$("#myDiv").html('Hello');

// Gets value of input with CSS class "emailInput"
$("input.emailInput").val();

Traversing: امکانات فوق العاده ای برای کار با نتیجه تابع $ مثل گرفتن Element بالادستی نمونه پیدا شده. عضو بعدی، قبلی، اولی، آخری و غیره. یادگیری این بخش خیلی اهمیت داره.

// Changes the color of all divs then
// puts a border around only some of them
$("div").css("color", "blue").******(".middle").css("border-color", "red");

// Adds a border to divs that are not green or blue.
$("div").not(".green, #blueone").css("border-color", "red");

// Finds all divs and makes a border.
// Then adds all paragraphs to the
// jQuery object to set their color yellow.
$("div").css("border", "2px").add("p").css("color", "yellow");

// Finds the very next sibling of each disabled button
// and changes its text "this button is disabled".
$("button[disabled]").next().text("this button is disabled");


// Gets Parent of #myP which is a DIV
// and changes its color to #444
$("#myP").parent('div').css('color', '#444');

// Gets Parent of #myP which is a DIV + #myP itself
// and changes their color to #444
$("#myP").parent('div').andSelf().css('color', '#444');

Manipulation: توابعی برای تغییر محتویات Elementها. این توابع امکان قرار دادن HTML یا Element رو در Elementهای دیگه میدن. مثلا بخوایم یک پاراگراف رو داخل یک کادر ببریم و غیره.

// Changes contents of #myP
$("#myP").html("My Name is <b>Amir Hossein</b>");

// Inserts #myP to bottom of #myDiv
$("#myP").appendTo("#myDiv");

// Inserts #myP after #myDiv
$("#myP").after("#myDiv");

// Removes .myClass elements from #myDiv
$("#myDiv").remove(".myClass");

CSS: توابعی برای دسترسی و تغییر در مقادیر CSS.

// Changes font-family of #myP
$("#myP").css('font-family', 'Tahoma, Arial');

// Alerts font-family of #myP
alert( $("#myP").css('font-family') );

// Alerts width of #myP
alert( $("#myP").width() );

Events: بخش بسیار مهمی برای تنظیم رویدادها برای Elementها مثل click و change و mouseover و غیره.

// Alerts when #myP is clicked
$("#myP").click(function() **
alert('Clicked!');
});

// Alerts when #myForm is submited
$("#myForm").submit(function() **
alert('Submited!');
});

// Submits #myForm
$("#myForm").submit();

// Alerts when mouse enters and leaves #myDiv
$("#myDiv").hover(
function() **
alert('Mouse entered!');
},
function() **
alert('Mouse left!');
}
);

Effects: انیمیشن سازی در jQuery شامل توابع محوسازی، اسلاید و تغییر تدریجی مشخصه های CSS.

// Fades #myP out
$("#myP").fadeOut();

// Fades #myP out slowly and Alerts when fading is finished.
$("#myP").fadeOut("slow", function()**
alert('myP is hidden now!');
});

// Slides #myDiv up in 800 miliseconds
// and after finishing it, Slides it down
$("#myDiv").slideUp(800, function() **
$("#myDiv").slideDown();
});

// Changes background-color of #myDiv to pink,
// width of it to 500px
// and adds 100px to its height slowly
$("#myDiv").animate(**
'background-color' : 'pink',
width: '500px',
height: '+=100px'
}, 'slow');

Ajax: توابع آماده کار با AJAX. برخی از این توابع به Elementها متصل نمی شوند و مستقیما باید به خود شیء jQuery متصل گردند.

// Sends "name=AHHP&location=Boplo.ir" to some.php
// as a POST request and Alerts response
// after successful request
$.ajax(**
type: "POST",
url: "some.php",
data: "name=AHHP&location=Boplo.ir",
success: function(msg)**
alert("Server Response: " + msg);
}
});

// Sends HTTP request to some.php
// Gets #myP from its response and
// Puts it in #myDiv
$("#myDiv").load("some.php #myP");

Utilities: توابعی برای سهولت کار در جی کوئری مثل توابع شمارش آرایه و شیء، چک کردن نوع متغیرها، تبدیل شیء به کوئری و غیره.

// Alerts "name=AHHP&location=Boplo.ir"
alert( $.param({name:'AHHP', location:'Boplo.ir'}) );

// Alerts 'Hello'
// (Removes unwanted starting and ending spaces)
alert( $.trim(' Hello ') );

// Alerts: 1, 9, 4, 7, 3, 8, 6, 9, 1
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
var result = $.grep(arr, function(n, i)**
return (n != 5 && i > 4);
});
alert( result.join(", ") );

Internals: شامل توابعی که کاربرد خیلی خاص دارند مثل تابع data.

// Stores someName=someValue to #myP
// then retrieves it by alert
var myP = $('#myP');
$.data(myP , 'someName', 'someValue');
// ....
alert( $.data(myP , 'someName') );

منبع : بوپلو

decoder2012
03-09-2011, 05:35 PM
همانطور که در پست بالا دوست خوبمون " Behzad_Ps " به معرفی اجمالی توابع در جی کوئری پرداختن ، حال من در خصوص یکی از این توابع بنام Ajax مطالبی رو پیدا کردم که بد ندیدم برای دوستان هم قرار بدم .

jQuery و ایجاکس :

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

قبل از شروع باید بدانیم Ajax چیست ؟

Ajax مختصر شده عبارت Asynchronous JavaScript and XML میباشد . این تکنولوژی اولین بار برای استفاده از داده های Xml در جاوا اسکریپت ایجاد شد.

Ajax یک زبان برنامه نویسی نیست . بلکه تکنولوژی برای ارتباط با سرور از طریق جاوااسکریپت و ایجاد صفحات داینامیک میباشد .

هسته اصلی ایجاکس شیی به نام XML[Only registered and activated users can see links] می باشد .

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

ایجاکس در jquery :

در jquery توابعی برای کار با ایجاکس وجود دارد که کار را با این تکنولوژی بسیار آسان نموده است . توسط این توابع میتوان تبادل اطلاعات را با سرور بصورت TXT , HTML , XML و JASON و با استفاده از دو متد GET و POST انجام داد .

و شما میتوانید اطلاعات نتیجه که از سرور بدست می آید را در عنصر انتخابی (selector ) به نمایش در آورید .

در ادامه به بررسی این توابع خواهیم پرداخت :

تابع load :

$(selector).load(url,data,callback)

این تابع فایل موجود در آدرس url را خوانده و پس از اجرای کامل نتیجه را در عنصر انتخابی (Selector ) نمایش میدهد .

یک مثال ساده :

فرض کنید فایلی با نام loadtxt.txt در پوشه files سرور دارید و میخواهید با کلیک روی دکمه ای آن را در صفحه به نمایش در آورید :


<html>
<head>


<script type=”text/javascript” src=”jquery.js”></script>

<script type=”text/javascript”>

$(document).ready(function()**

$(”button”).click(function()**

$(’#result’).load(’files/loadtxt.txt’);


});


});


</script>

</head>

<body>

<button>Click to Load Data</button>

<div id=”result”></div>

</body>

</html>

پس از اجرای این برنامه با کلیک روی دکمه محتوی موجود در فایل تکست در تگ div نمایش می یابد .

تابع load دو آرگومان دیگر دارد . آرگومان data : زمانی که شما میخواهید یک اسکریپ زبان سرور را (فایلهای php یا asp یا aspx و … ) از سرور بخوانید و باید دیتایی را برای پردازش به آن اسکریپت بفرستید توسط این آرگومان این کار را انجام میدهید .

آرگومان Callback نیز تابعی است که هنگامی که عملیات لود به طور کامل انجام شد اجرا خواهد شد .

مثال :

فرض کنید شما در پوشه files در سرور فایلی به نام loadname.php دارید که محتوای آن بصورت زیر است :

<?php

$name = $_REQUEST[’name’];

echo ‘Welcome ‘.$name;

?>

کار این برنامه این است که نامی را به عنوان داده دریافت میکند و پیام خوش آمد را نمایش میدهد .

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


<html>

<head>

<script type=”text/javascript” src=”jquery.js”></script>

<script type=”text/javascript”>

$(document).ready(function()**

$(”button”).click(function()**

var inputname = $(’input#name’).val();

$(’#result’).load(’files/loadname.php’,{name:inputname},finish_load);

});

});

function finish_load()

**

alert(’load finish’);

}

</script>

</head>

<body>

Please Enter Your Name :

<input type=”text” id=”name” />

<button>Click to Load Data</button>

<dir id=”result”></dir>

</body>

</html>

همان طور که در کد فوق میبینید پس از کلیک روی دکمه button ابتدا توسط تابع val مقدار موجود در textbox را خوانده و در متغیر inputnum قرار میدهیم . سپس با استفاده از دستور load این مقدار را به فایل loadname.php می فرستیم و در پایان هنگامیکه پاسخ از سرور داده شد و پیام خوش آمد نمایش یافت تابع finish_load اجرا میشود و عبارت “load finish” بر روی صفحه نمایش داده خواهد شد .

نکته ۱ : تابع val() : این تابع مقدار یک عنصر فرم را برمیگرداند و در صورتی که مقدار داشته باشد آن مقدار را به خصوصیت value عنصر انتخابی selector نصبت میدهد.

$(selector).val(content);

نکته ۲ : در صورتی که چند داده را میخواهید به عنوان data به سرور ارسال نمایید آنها را داخل } و ** قرار داده و هر داده را با کاما “,” از داده بعدی جدا نمایید :

{var۱:value۱,var۲:value۲,var۳:value۳}

تابع $.ajax(option) :

سطح پایین ترین تابع کار با ایجاکس در جی کوئری تابع ajax می باشد . برای استفاده از این تابع باید تمام پارامتر های ارسال را توسط آرگومان option به سرور ارسال نماییم .

مثال ساده :

$.ajax(**

url: ‘ajax/test.html’,

success: function(data) **

$(’.result’).html(data);

alert(’Load was performed.’);

}

});

در این مثال تابع ajax فایل test.html را از سرور فراخوانی کرده و نتیجه را در عنصری با کلاس result نمایش میدهد .

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

تابع : $.get و $.post :

$.post(url,data,callback,type);

$.get(url,data,callback,type);

این دو تابع همان طور که از نامشان پیداست با دو متد مختلف post و get اسکریپت url را از سرور فراخوانی نموده و نتیجه را توسط تایع callback برمیگردانند.

* url : آدرس اسکریپتی که سمت سرور باید اجرا شود
* Data : داده هایی که به سرور فرستاده میشود : {name:value,name:value,…}
* Callback : تابعی است که هنگامی که داده ها از سرور به طور کامل بارگزاری شد صدا زده میشود .
* Type : نوع داده های خروجی از سرور را مشخص میکند و میتواند مقادیر (html,xml,json,jasonp,script,text) باشد

تنها تفاوت این دو تابع در نوع ارسال داده به سرور است که اولی از متد post استفاده مینماید و دومی از متد get . بنابراین در صورتی که میخواهید فقط فایلی را از سرور بازخوانی نمایید و قصد ارسال داده به سرور را ندارید، بهتر است از تابع get استفاده نمایید . (و یا تابع load ) .

(اگر در مورد این دو متد آشنایی ندارید به آموزش زبانهای برنامه نویسی تحت سرور مانند php یا asp مراجعه نمایید ).

مثال :

مثالی که در بالا برای تابع ajax نوشته شد را با تابع get بصورت زیر میتوان نوشت :

$.get(’ajax/test.html’, function(data) **



$(’.result’).html(data);



alert(’Load was performed.’);



});

و یا مثالی دیگر : در این مثال میخواهیم همان مثالی را که در ابتدای فصل برای تابع load نوشتیم با تابع post بنویسیم . در این صورت قسمت کد ما به شکل زیر تغییر خواهد کرد :

$(document).ready(function()**



$(”button”).click(function()**



var inputname = $(’input#name’).val();



$.post(’files/loadname.php’,{name:inputname},function(Data)**



$(’#result’).html(Data);



finish_load();



});



});



});

همان طور که در مثال میبینید . تابع callback با مقدار data پس از فراخوانی کامل loadname.php صدا زده میشود و در این تابع مقدار data که همان نتیجه اجرای اسکریپت loadname.php است توسط دستور html(data) در عنصر با آیدی result نمایش می یابد .





منبع : [Only registered and activated users can see links]

decoder2012
03-09-2011, 05:37 PM
تابع getScript :

$.getScript(url,callback)

تابع getScript ، برای فراخوانی و اجرای یک فایل جاوااسکریپت ( js ) به کار برده میشود .

این تابع ساده شده تابع ajax با فرمت زیر می باشد :

$.ajax(**



url: url,



dataType: ’script’,



success: success



});

مثال :

$.getScript("test.js");

این مثال باعث فراخوانی و اجرای فایل test.js میشود .

$.getScript("[Only registered and activated users can see links]", function()**



alert("Script loaded and executed.");



});

در مثال فوق فایل test.js در آدرس blog.monavarian.ir فراخوانی میشود و در صورتی که فراخوانی با موفقیت انجام شود پیغام مناسب نمایش می یابد .



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





تابع getJSON :

$.getJSON(url,data,callback);

این تابع برای فراخوانی فایل با فرمت Jason از سرور می باشد .



توی پرانتز ( مختصری درباره Jason ) :

فایلهای Jason ، فایلهای داده ای هستند که داده ها را با فرمت خاصی ذخیره میکنند . مانند فایلهای xml فایلهای Jason نیز دارای یک فرمت خاص برای ذخیره اطلاعات می باشند .

ساختار هر شی jason به صورت روبرو می باشد :

{string : value , string:value , … }

Value ها میتوانند شامل مقادیر string , object , number , array , true , false , null باشند .

ساختار Array در jason نیز به فرم زیر می باشد :

[item۱,item۲,item۳,…]

هر item نیز خود میتواند شامل مقادیر معرفی شده در بالا باشد .

برای کسب اطلاعات بیشتر به سایت مرجع Jason به آدرس [Only registered and activated users can see links] مراجعه نمایید .





یک مثال کلی با post : در این مثال قصد داریم فرمی را توسط توابع jquery بررسی کرده و سپس توسط تابع post به سرور فرستاده و نتیجه را نمایش دهیم :

برای مثال میخواهیم یک فرم ساده ورود ایجاد نماییم . فایل اسکریپت forms.php بررسی میکند که نام کاربری و کلمه عبور داده شده در لیست کاربران موجود است . در صورتی که موجود باشد مقدار ۱ و در صورتی که موجود نباشد مقدار صفر را بر میگرداند . محتوی این فایل به صورت زیر است :

<?php



//user defind :



$users = array (



‘admin’ => ‘demo’,



‘test’ => ‘test’,



‘user’ => ‘pass’,



);



$username = trim($_POST[’username’]);



$pass = trim($_POST[’password’]);



if ( array_search($pass,$users) == $username )



echo ‘۱′;



else



echo ‘۰′;



?>

این فایل را در پوشه files ذخیره میکنیم .

در فایل اصلی html :


<!DOCTYPE html PUBLIC "-//W۳C//DTD XHTML ۱.۰ Transitional//EN" "[Only registered and activated users can see links]۳.org/TR/xhtml۱/DTD/xhtml۱-transitional.dtd">



<html xmlns=”[Only registered and activated users can see links]۳.org/۱۹۹۹/xhtml”>



<head>



<script src=”jquery.js” type=”text/javascript” ></script>



<meta [Only registered and activated users can see links]”Content-Type” content=”text/html; charset=utf-۸″ />



<script type=”text/javascript”>



$(document).ready(function()**



$(’input’).focus(function()**



$(’input’).removeClass(’select’);



$(this).addClass(’select’);



});



$(’form’).submit(function(event)**



event.preventDefault();



var user = $(’input#username’).val();



var pass = $(’input#pass’).val();



if (!user)



**



$(’.result’).html(’please Enter username’);



$(’input#username’).focus();



}


else if(!pass)


**


$(’.result’).html(’please Enter password’);


$(’input#pass’).focus();


}


else


**


$.post(’files/forms.php’,{username:user,password:pass},functio n(data)**


if (data == ‘۱′)


**


$(’.result’).html(’Login Success <br/> welcome ‘+user);


$(’form’).hide();


}


else if (data == ‘۰′)


$(’.result’).html(’username or password is not correct’)


else


$(’.result’).html(’can not connect to server’)


})


}


return false;


})


})


</script>


<title>Form Validation</title>


<style>


.result **


color:#FF۰۰۰۰;


}


.select **


background:#fff;

border:۲px solid #۰۰۰۰ff;


}


</style>


</head>


<body>


<div class=”result” > </div>


<form action=”#” >


<input type=”text” name=”username” id=”username” />


<input type=”password” name=”pass” id=”pass” />


<input type=”submit” value=”Login”/>


</form>


</body>
</html>

همان طور که در کد بالا مشاهده می کنید . در ابتدا هنگام submit فرم بررسی میکند و در صورت خالی بودن فیلدهای username و یا pass پیغام مناسب درج میکند و سپس نشانگر را به فیلد خالی هدایت می کند (focus ) .

در صورتی که username و pass وارد شده باشد . این مقادیر را به فایل forms.php میفرستد و در نتیجه بررسی میکند : در صورتی که نتیجه فرستاده شده از سرور ۱ باشد پیغام خوش آمد نمایش میدهد و فرم را مخفی (hide ) می نماید در غیر این صورت پیغام مناسب را درج می نماید.

zabih2011
05-03-2011, 12:17 PM
سلام
فرض كنيم فايل اصلي php داراي يك جدول و دوستون باشد كه در ستون اول منو داشته باشيم و با انتخاب هر گزينه منو ، صفحه مربوط به آن در ستون دوم در يك iframe نمايش داده شود . اگر بخواهيم در صفحه نمايش داده شده در ifame پس از انجام عمليات خاصي مقداري را به صفحه اصلي ارسال كنيم و در صورت مناسب بودن اين مقدار ، نتيجه در صفحه اصلي نمايش داده شود چه بايد كرد؟
به عنوان مثال پس از ارسال نتيجه از صفحه داخل iframe به صفحه اصلي ، يك دستور php در صفحه اجرا شده و منويي در ستون اول صفحه اصلي ظاهر شود

JA2OGAR
06-20-2011, 12:51 PM
۸ نکته برای بهینه سازی و افزایش کارایی کدهای JQuery


در هر پروژه بهینه کردن و افزایش کارایی یکی از مهمترین اهداف در کدنویسی خواهد بود. JQuery هم از این قاعده مستثنی نیست.

در این مقاله قصد دارم شما را با چند نکته مفید در این زمینه آشنا کنم که به نظر، هر توسعه دهندهء JavaScript ای که از فریم ورک JQuery استفاده می کند باید آنها را رعایت کند. این سوال را از خودتان بپرسید که آیا اسکریپت هایتان به اندازه ای که ممکن است سریع اجرا می شوند؟ آیا می توان با خطوط کدهای کمتر به همین نتیجه رسید؟ در اغلب حالات جواب این سوالات “نه” خواهد بود.

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

در این مقاله قصد دارم تا ۸ نکته را برایتان مطرح کنم که به شما کمک خواهد کرد تا مطمئن شوید پروژه های JQuery تان بهینه تولید شده اند.



۱. بروز باشید! آیا از متدها و تکنیکهایی استفاده می کنید که منسوخ شده اند؟

منظورم از “منسوخ” این است که شاید روش های بهتری برای دستیابی به کدی که شما همیشه می نویسید باشد. راحت ترین روش برای فهم این موضوع این است که این سوال را از خودتان بپرسید: آیا شما تفاوت jQuery 1.3.2 و jQuery 1.4.2 را می دانید؟ اگر نه به خواندن ادامه بدهید!

تیم JQuery هر سال صدها ساعت را صرف پیدا کردن توابع جدید و بهینه سازی توابع فعلی کتابخانه JQuery می کنند.گاهی از خودم می پرسم آیا John Resig (سازنده کتابخانه JQuery) که برای افزایش کارایی کتابخانه اش بی وقفه تلاش می کند هم در طول شبانه روز می خوابد؟

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


Delegate/Undelegate
nextUntil
Chaining event handlers
Controlling a functions context
Does a element have something? (.has)
Element Unwrapping
Determining an object’s type


اگر نه حتما مستندات آخرین نسخه های این کتابخانه را مطالعه کنید.


۱٫۴٫۱ features: [Only registered and activated users can see links]
1.4.2core features: [Only registered and activated users can see links]



2. آیا تنها کدهایی را که برای اجرا نیاز هست بارگزاری می کنید؟


برخی توسعه دهنده ها تمام کدهای JQuery یک سایت را در تمام صفحات بارگزاری می کنند.(صرف نظر از اینکه آیا از آن کدها در آنجا استفاده می کنند یا خیر). اگر شما این کار را تا به حال انجام می دادید نگران نباشید! همیشه می توان عادت ها را ترک کرد.

چیزی که شما باید به خاطر بسپارید این است که JQuery برای اجرای تمام کدها وقت صرف خواهد کرد حتی اگر اجرای قسمتی از کدها لزومی نداشته باشد. شما می توانید با بررسی اینکه اجرای آن کد در این صفحه لزومی دارد یا خیر کارایی را افزایش دهید. به این منظور می توانید هر محتوای صفحه را با یک کلاس یا ID منحصر به فردی مشخص کنید و قبل از اجرای کد وجودش را بررسی کنید.


۳. تست واحد (Unit Testing)

کدام یک از شما برای کدهای JavaScript یا JQuery تست واحد می نویسید. من فکر می کنم ما توسعه دهنده های وب تمایل داریم فراموش کنیم که JavaScript هم مانند Java ،C++ یا .NET یک زبان برنامه نویسی هست که ممکن است باگ داشته باشد. کمی زمان بیشتری برای پروژه تان وقت بگذارید و برای کدهایتان تست واحد بنویسید. این کار واقعا ساده علاوه بر اینکه یک تمرین عالی برای مهندسی نرم افزار است هنگامی که قرار است کدتان بخشی از یک محصول زنده با کاربران زیاد باشد جزء لاینفک کارتان خواهد بود. در چنین پروژه هایی شما باید دقیقا بدانید رفتار کدتان چه خواهد بود.

حالتی را فرض کنید که از AJAX* برای بارگزاری قسمتی از محتوای صفحه استفاده می کنید. اگر زمان انتظار برای پاسخگویی سرور به درخواست از حد معمول بیشتر شد مطلوب است که به جای هنگ صفحه برای یک مدت طولانی با پیامی از کاربر بخواهیم صفحه را Refresh کند. من اعتقاد دارم کاربران قدردان توجه شما به جزئیات خواهند بود.
اگر به دنبال ابزارهای تست واحد JavaScript می گردید من به شما QUnit و FireUnit* را توصیه می کنم.


۴. کدهای JQuery تان را محک بزنید.

کدتان چقدر سریع است؟ اگر شما دنبال راهی برای افزایش کارایی کدهایتان هستید به سادگی زمانی را که هر تابع برای اجرا می گیرد را ثبت کنید. کنسول Firebug ثبت اطلاعات دیباگ کدها را برای توسعه دهنده های JavaScript خیلی راحت می کند. اما اگر به دنبال نتایج دقیق تری هستید Firebug* را ببندید و خودتان یک ابزار ساده برای این کار ایجاد کنید. (به خاطر داشته باشید که Firebug یک افزونه فایرفاکس است و خودش برای بروزرسانی GUI اش سرباری را به صفحه اعمال می کند) دقت کنید این یک مثال بسیار ساده است و شما نیاز خواهید داشت تا کد را بر حسب نیاز ویرایش کنید.

JavaScript:
function t() {
ar time = new Date();
return time.getTime();
}
05
$(window).load(function() {
var s = t();
for (var i=0; i&amp;amp;amp;lt;10000; i=i+1) {
$('#content').html("hello");
}
$('#out').append( (t()-s) +'ms');
});12 });



HTML:

&lt;div&gt;Time:&lt;/div&gt;
&lt;div&gt;Content:&lt;/div&gt;


محک زدن Benchmarking)) شما را از سرعت اجرای کدتان در تمامی مرورگرها آگاه می کند و وقتی درباره برنامه های JQuery بزرگ مبتنی بر AJAX یا انیمیشن های مبتنی بر JavaScript صحبت می کنیم اهمیت زیادی دارد.


۵. با فشرده سازی فایل JS زمان بارگزاری را کمینه کنید.

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


[Only registered and activated users can see links] (for any sites)
[Only registered and activated users can see links] (for WordPress users)



Context .6 در برابر Find

این موضوع که هر جا که امکان دارد باید در Selector از Context استفاده کنید صحت دارد اما باید این نکته را بدانید که موقعی که شما یک context به سازنده JQuery ارسال می کنید موجب یک فراخوانی تابع بی مورد می شود. JQuery به هر حال content.find(selector) را اجرا می کند. بنابر این در صورتی که صفحه تان واقعا از مزایای context بهره نمی برد از این گام اضافه صرف نظر کنید. برای مثال به کد زیر دقت کنید:


//This is context is typically used.
$('div', context ).doSomethingOrOther();

//But here, you can do the same thing minus the extra
//instance and the additional function call
context.find('div').doSomethingOrOther();



7. Window.load

Document.ready چیز ترسناکی نیست. من و بسیاری از توسعه دهنده ها گاه و بیگاه کدهایمان را در این رویداد قرار می دهیم. اینکه $(function(){}); یا نسخه کاملترش را کجا استفاده می کنیم مهم نیست اما حقیقت این است که برنامه با استفاده از Window.load بهینه تر می شود. علت این است که document.ready در طول زمان رندر صفحه (در حالی که اشیاء هنوز در حال بارگزاری هستند) اجرا می شود و این موجب کمی واماندگی در صفحه می شود. شما می توانید با قرار دادن توابع در رویداد load (این رویداد وقتی تمام اشیاء فراخوانی شده در HTML بارگزاری شدند اتفاق می افتد) میزان مصرف CPU* را در زمان بارگزاری صفحه کاهش دهید.


۸. استفاده از JavaScript در کنار JQuery

JQuery یک راه خارق العاده برای افزایش سرعت طراحی صفحات وب می باشد اما موقعیت هایی وجود دارد که استفاده از JavaScript نسبت به فراخوانی توابع JQuery کارایی بیشتری را برای ما فراهم می کند.(برای مثال توابع کار با CSS)

برخی متدها مانند () Show و () hide سربار خود را بر سرعت اجرای کدها اعمال می کنند. همیشه سعی کنید با ترکیب کدهای JavaScript و JQuery توازنی بین پیچیدگی کدها و کارآمدی آنها بر قرار کنید.

همچنین در مواقعی که تمام چیزی که نیاز دارید چند خط JavaScript می باشد نیازی نیست از JQuery* استفاده کنید. (حتی نسخه فشردهء آن موجب حدود ۳۰Kb سربار اضافی موقع بارگزاری صفحه می شود). در مقابل اگر شما برنامه بزرگ و پیچیده ای می نویسید حتما از JQuery به جای JavaScript* استفاده کنید. بهترین تصمیم این است که با ترکیب JavaScript و JQuery از مزایای هر دو بر خوردار شویم.