توفّر واجهة برمجة التطبيقات URLSearchParams
واجهة متّسقة
لإدخال أجزاء عنوان URL والسماح بإجراء تعديلات بسيطة
على سلسلة طلب البحث (الجزء الذي يأتي بعد ?
).
في العادة، يستخدم مطوّرو البرامج التعبيرات العادية وتقسيم السلاسل لسحب مَعلمات طلب البحث من عنوان URL. لنكن صادقين مع أنفسنا، هذا ليس أمرًا ممتعًا.
وقد يكون هذا الإجراء مرهقًا وقابلًا للخطأ. وأحد أسراري المظلمة هو أنني أعدت استخدام
get|set|removeURLParameter
أساليب المساعدة نفسها في العديد من تطبيقات Google.com الكبيرة، بما في ذلك Google Santa Tracker ومؤتمر Google I/O 2015 على الويب.
لقد حان الوقت لتوفير واجهة برمجة تطبيقات مناسبة تُجري هذه الإجراءات نيابةً عنا.
واجهة برمجة التطبيقات URLSearchParams
ينفِّذ Chrome 49 URLSearchParams
من مواصفات عنوان URL، وهي واجهة برمجة تطبيقات مفيدة للتعامل مع معلَمات طلب البحث لعناوين URL. أرى أنّ URLSearchParams
هي بديل ملائم لعناوين URL، تمامًا كما كان FormData
بديلاً مناسبًا للنماذج.
ما هي الإجراءات التي يمكنك اتّخاذها؟ باستخدام سلسلة عنوان URL، يمكنك بسهولة استخراج قيم المَعلمات:
// Can also constructor from another URLSearchParams
const params = new URLSearchParams('q=search+string&version=1&person=Eric');
params.get('q') === "search string"
params.get('version') === "1"
Array.from(params).length === 3
for (let p of params) {
console.log(p);
}
ضبط قيمة مَعلمة:
params.set('version', 2);
إضافة قيمة أخرى لمَعلمة حالية:
params.append('person', 'Tim');
params.getAll('person') === ['Eric', 'Tim']
حذف مَعلمات:
params.delete('person');
العمل مع عناوين URL
في معظم الأحيان، من المحتمل أن تعمل مع عناوين URL كاملة أو تعدِّل عنوان URL
لتطبيقك. يمكن أن تكون طريقة وضع التصميم URL
مفيدة بشكل خاص في الحالات التالية:
const url = new URL('https://example.com?foo=1&bar=2');
const params = new URLSearchParams(url.search);
params.set('baz', 3);
params.has('baz') === true
params.toString() === 'foo=1&bar=2&baz=3'
لإجراء تغييرات فعلية على عنوان URL، يمكنك الحصول على المَعلمات وتعديل قيمها، ثم استخدام history.replaceState
لتعديل عنوان URL.
// URL: https://example.com?version=1.0
const params = new URLSearchParams(location.search);
params.set('version', 2.0);
window.history.replaceState({}, '', `${location.pathname}?${params}`);
// URL: https://example.com?version=2.0
لقد استخدمت هنا سلاسل نماذج ES6 لإعادة إنشاء عنوان URL معدّل من مسار عنوان URL الحالي للتطبيق والمعلمات المعدَّلة.
الدمج مع عناوين URL لأماكن أخرى
يؤدي إرسال FormData
في طلب واجهة برمجة التطبيقات fetch()
تلقائيًا إلى إنشاء نص مكوّن من عدة أجزاء.
إذا كنت بحاجة إلى ذلك، يوفّر URLSearchParams
آلية بديلة لبيانات POST
التي يتم ترميزها باستخدام ترميز URL بدلاً من تنسيق MIME المتعدّد الأجزاء.
const params = new URLSearchParams();
params.append('api_key', '1234567890');
fetch('https://example.com/api', {
method: 'POST',
body: params
}).then(...)
على الرغم من أنّه لم يتم تنفيذه بعد في Chrome، يتم دمج URLSearchParams
أيضًا
مع علامة URL
وعلامة a
. يتوافق كلاهما مع الصديق الجديد من خلال توفير
خاصية للقراءة فقط، .searchParams
للوصول إلى مَعلمات طلب البحث:
const url = new URL(location);
const foo = url.searchParams.get('foo') || 'somedefault';
تحصل الروابط أيضًا على سمة .searchParams
:
const a = document.createElement('a');
a.href = 'https://example.com?filter=api';
// a.searchParams.get('filter') === 'api';
رصد الميزات وتوافق المتصفّح
يتيح حاليًا الإصدار 49 من Chrome والإصدار 44 من Firefox والإصدار 36 من Opera استخدام URLSearchParams
.
if ('URLSearchParams' in window) {
// Browser supports URLSearchParams
}
بالنسبة إلى polyfills، أنصح باستخدام الرابط github.com/WebReflection/url-search-params.
عرض توضيحي
يُرجى تجربة النموذج.
للاطّلاع على URLSearchParams
في تطبيق حقيقي، يمكنك الاطّلاع على أداة إنشاء مجموعة الرموز التعبيرية لتصميم المواد من Polymer. لقد استخدمتُها لإعداد الحالة الأولية للتطبيق من رابط لصفحة في التطبيق. مفيد جدًا :)