فرض کنید اطلاعات صفحهای بر اساس کوئری استرینگ دریافتی رندر میشوند. مثلا یک گرید و یا حتی یک صفحه ویرایش اطلاعات. در حین فراخوانی متد Ajax در jQuery اطلاعات کوئری استرینگهای موجود به سرور ارسال نخواهند شد و صرفا اطلاعاتی که در پارامتر data آن صریحا ذکر میشوند، به سرور ارسال میگردند.
برای رفع این نقیصه با استفاده از قطعه کد زیر میتوان کلیه کوئری استرینگهای صفحه را یافت و به شیءایی به نام urlParams به صورت خاصیت اضافه کرد:
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
سپس اگر قسمت ارسال اطلاعات متد ajax در حال فراخوانی چنین شکلی را داشته باشد:
$.ajax({
type: "POST",
url: "@sortUrl",
data: JSON.stringify({ items: items, surveyId: surveyId }),
نیاز خواهیم داشت تا urlParams را با آن یکی کنیم. اینکار نیز توسط متد extend خود jQuery قابل انجام است:
function jsonConcat(defaults, options) {
/* merge defaults and options, without modifying defaults */
return $.extend({}, defaults, options);
}
بنابراین در نهایت قسمت ارسال اطلاعات ما برای الحاق کلیه کوئری استرینگهای صفحه چنین شکلی را خواهد یافت:
var ajaxData = { items: items, surveyId: surveyId };
$.ajax({
type: "POST",
url: "@sortUrl",
data: JSON.stringify(jsonConcat(ajaxData,urlParams)),
و در سمت سرور امضای متدی که اطلاعات به آن ارسال میشوند، در این مثال خاص شامل items و surveyId به همراه نام کوئری استرینگهای مدنظر میتواند باشد و اطلاعات به صورت خودکار به آنها بایند خواهند شد.