ورود

View Full Version : سوال: چطور می توان به query string در jquery دسترسی داشت؟



kabotareazad
پنج شنبه 01 مهر 1389, 10:07 صبح
چطور می توان به query string در jquery دسترسی داشت؟

NR_Nazifi
پنج شنبه 01 مهر 1389, 10:15 صبح
شما می تونی از این کد استفاده کنی!


var urlParams = {};
(function () {
var e,
d = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); },
q = window.location.search.substring(1),
r = /([^&=]+)=?([^&]*)/g;

while (e = r.exec(q))
urlParams[d(e[1])] = d(e[2]);
})();

اگر این مثال رو به تابع فوق بدیم:

?i=main&mode=front&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Hello%20&empty

نتیجه زیر را می بینیم:

urlParams = {
enc: " Hello ",
i: "main",
mode: "front",
sid: "de8d49b78a85a322c4155015fdce22c4",
empty: ""
}

javad_mjt
پنج شنبه 01 مهر 1389, 13:24 عصر
سلام
راه حل ساده تری وجود نداره؟

mehdi.mousavi
پنج شنبه 01 مهر 1389, 17:59 عصر
سلام راه حل ساده تری وجود نداره؟

سلام.
می تونید به این شکل عمل کنید:


function queryString(key) {
var re = new RegExp('[?&]' + key + '=([^&$]*)', 'i');
var offset = location.search.search(re);
return offset == -1 ? null : decodeURIComponent(RegExp.$1);
}


یا از این کلاس (http://adamv.com/dev/javascript/files/querystring.js)ی که Adam Vandenberg نوشته استفاده کنید (طریقه استفاده (http://adamv.com/dev/javascript/querystring))

یا اگر در plugin بودنش اصرار دارید (که اصلا نیازی به این مساله نیست)، می تونید از این Plugin (http://test.blairmitchelmore.com/jquery.query/jquery.query.js) که Blair Mitchelmore نوشته استفاده کنید.

موفق باشید.

NR_Nazifi
پنج شنبه 01 مهر 1389, 18:52 عصر
کد اقای موسوی خیلی ساده و خوب است، متشکرم

من یک راه حل دیگه هم دارم، اینکه از HiddenFieldها استفاده کنیم
در در هنگام لود صفحه در سمت سرور اطلاعات query string را بذار داخل hidden field بعد در jquery از id فیلد hidden استفاده کرده و به محتواش دسترسی پیدا می کنی

البته بگم این راه حل خیلی ساده و کار راه اندازه اما برای تعداد بالای متغیر در query string کار مشکل میشه و به نظر من بهتره از همون کد های jquery بالا استفاده کنی

mehdi.mousavi
پنج شنبه 01 مهر 1389, 22:34 عصر
من یک راه حل دیگه هم دارم، اینکه از HiddenFieldها استفاده کنیم
در در هنگام لود صفحه در سمت سرور اطلاعات query string را بذار داخل hidden field بعد در jquery از id فیلد hidden استفاده کرده و به محتواش دسترسی پیدا می کنی

سلام.
این پیشنهاد شما، با قانون DRY (یعنی Don't Repeat Yourself که بهش DIE هم میگن) در تضاد هستش. به بیان دیگه، شما نباید یک سری اطلاعات رو در دو نقطه از سیستم داشته باشید. علاوه بر این، اینکار باعث بالا رفتن بی مورد حجم صفحه میشه و اصلا پیشنهاد خوبی نیست (اگر چه عملیه).

موفق باشید.

aserfg
یک شنبه 04 مهر 1389, 11:09 صبح
جنا آقای موسوی عزیز بنده با کدهای سمت کللاینت آشنایی زیادی ندارم و به شدت به این کد شما نیازمندم دقیقا اگه می شه بگین چطور پارامتر رو ارسال کنم در jquery و نحوه دریافتش با این تابع شما چطوره ؟
مثلا اینطوری می شه استفاده کرد؟

<script type="text/javascript">
function queryString(key) {
var re = new RegExp('[?&]' + key + '=([^&$]*)', 'i');
var offset = location.search.search(re);
return offset == -1 ? null : decodeURIComponent(RegExp.$1);
}

$(document).ready(function(){
document.write(queryString(key));
});

mehdi.mousavi
یک شنبه 04 مهر 1389, 12:51 عصر
جنا آقای موسوی عزیز بنده با کدهای سمت کللاینت آشنایی زیادی ندارم و به شدت به این کد شما نیازمندم دقیقا اگه می شه بگین چطور پارامتر رو ارسال کنم در jquery و نحوه دریافتش با این تابع شما چطوره ؟ مثلا اینطوری می شه استفاده کرد؟

سلام.
منظورتون از ارسال پارامتر چیه؟ فرض کنید یه URL داریم به این شکل:


http://barnamenevis.org/forum/newreply.php?do=newreply&p=1109289

کافیه برای گرفتن مقدار p از URL فوق (به بیان دیگه، عدد 1109289) در صفحه newreply.php، بدین شکل عمل کنیم:

$(document).ready(function(){
document.write(queryString('p'));
});

اگر منظورتون چیز دیگه ای بوده، لطفا بیشتر توضیح بدید.

موفق باشید.

aserfg
یک شنبه 04 مهر 1389, 16:57 عصر
من می خوام در ASP.NET اگه پارامتر 1 بود مثلا کدهای jquery

$("#editrow").hide(500);

$("#edit").hide(500);

$("#insert").show();

$("#question").show();

$("#option").hide(500);


در غیر این صورت کدهای دیگه ای شبیه اینا اجرا بشه

mehdi.mousavi
یک شنبه 04 مهر 1389, 17:06 عصر
سلام.
خوب، همونطوریکه گفتم، میتونید به این شکل عمل کنید:

$(document).ready(function(){

var myParamValue = queryString('myParamNameInQueryString');
if(myParamValue == '1') {
//execute whatever that suits your needs...
}
else {
//execute whatever that suits your needs...
}
});

اینجا، ابتدا مقدار پارامتری که اسمش رو myParamNameInQueryString گذاشتم میگیرم، بعد نگاه میکنم، اگر مقدارش 1 بود، Branch اولیه اجرا میشه، اگر نه، اجرا به شاخه else منتقل میشه. در حقیقت من فرض کردم شما صفحه ای در ASP.NET دارید که در فایل ASPX اش، کد فوق رو نوشته اید. اگر فرض کنیم اسم فایل ASPX شما، myfile.aspx هستش در اینصورت هر وقت URL زیر از سرور درخواست بشه، کد JavaScript شما بدرستی اجرا خواهد شد:


http://myserver.com/myfile.aspx?myParamNameInQueryString=2

چون پارامتر مربوطه مقدارش 2 هستش، در نتیجه اجرا به else بالایی متقل میشه و کد موجود در else اجرا خواهد شد. اگر 1 بذارم این پارامتر رو در URL، اونوقت بخش اول if اجرا خواهد شد.

موفق باشید.

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

kabotareazad
دوشنبه 05 مهر 1389, 10:22 صبح
با تشکر از دوستان:

جناب موسوی میشه بگین که چه فرقی بین کد شما در پاسخ شماره 4 و دو پاسخ دیگرتون در شماره های 8 و 10 است
اگر به این راحتی میشه به query string دسترسی داشت چرا از regexp استفاده کنیم؟
با تشکر

mehdi.mousavi
دوشنبه 05 مهر 1389, 13:11 عصر
با تشکر از دوستان: جناب موسوی میشه بگین که چه فرقی بین کد شما در پاسخ شماره 4 و دو پاسخ دیگرتون در شماره های 8 و 10 است اگر به این راحتی میشه به query string دسترسی داشت چرا از regexp استفاده کنیم؟ با تشکر

سلام.
من تو پاسخ شماره 4، یک تابع نوشتم به اسم queryString. تو پاسخهای بعدی هم نحوه استفاده از اون تابع رو نشون دادم، اما Source اش رو مجددا ننوشتم (برای اینکه دوباره کاری بود).

اما در کل، window.location.search به شما QueryString رو میده، حالا اینکه توی این QueryString چطوری مقدار فلان پارامتر رو از بدست بیارید، به خودتون بستگی داره. Regular Expression ها یکی از روشهای خوب برای این جداسازی هستش.

موفق باشید.