URLSearchParams
API menyediakan antarmuka
yang konsisten ke berbagai bagian URL dan memungkinkan manipulasi sederhana
string kueri (hal-hal setelah ?
).
Secara tradisional, developer menggunakan ekspresi reguler dan pemisahan string untuk mengambil parameter kueri dari URL. Jika kita jujur pada diri sendiri, hal itu tidak menyenangkan.
Proses ini bisa merepotkan dan rentan error. Salah satu rahasia gelap saya adalah saya telah menggunakan kembali
metode helper get|set|removeURLParameter
yang sama di beberapa aplikasi Google.com besar, termasuk Google Santa Tracker dan web Google I/O 2015.
Saatnya menggunakan API yang tepat yang melakukan hal ini untuk kita.
URLSearchParams API
Chrome 49 menerapkan URLSearchParams
dari spesifikasi URL, API yang berguna untuk mengutak-atik parameter kueri URL. Saya menganggap URLSearchParams
sebagai kemudahan yang setara dengan URL
seperti FormData
untuk formulir.
Jadi, apa yang dapat Anda lakukan dengan fitur ini? Dengan string URL, Anda dapat dengan mudah mengekstrak parameter value:
// 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);
}
setel nilai parameter:
params.set('version', 2);
tambahkan nilai lain untuk parameter yang ada:
params.append('person', 'Tim');
params.getAll('person') === ['Eric', 'Tim']
menghapus parameter:
params.delete('person');
Menggunakan URL
Sebagian besar waktu, Anda mungkin akan menggunakan URL lengkap atau mengubah URL aplikasi. Konstruktor URL
dapat sangat berguna untuk kasus berikut:
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'
Untuk melakukan perubahan sebenarnya pada URL, Anda dapat mengambil parameter, memperbarui nilainya,
lalu menggunakan history.replaceState
untuk memperbarui 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
Di sini, saya telah menggunakan string template ES6 untuk merekonstruksi URL yang diperbarui dari jalur URL aplikasi yang ada dan parameter yang diubah.
Integrasi dengan URL tempat lain digunakan
Secara default, pengiriman FormData
dalam permintaan API fetch()
akan membuat isi multipart.
Jika Anda memerlukannya, URLSearchParams
menyediakan mekanisme alternatif untuk data POST
yang dienkode URL, bukan mime multipart.
const params = new URLSearchParams();
params.append('api_key', '1234567890');
fetch('https://example.com/api', {
method: 'POST',
body: params
}).then(...)
Meskipun belum diterapkan di Chrome, URLSearchParams
juga terintegrasi
dengan konstruktor URL
dan tag a
. Keduanya mendukung buddy baru kita dengan menyediakan properti hanya baca, .searchParams
untuk mengakses parameter kueri:
const url = new URL(location);
const foo = url.searchParams.get('foo') || 'somedefault';
Link juga mendapatkan properti .searchParams
:
const a = document.createElement('a');
a.href = 'https://example.com?filter=api';
// a.searchParams.get('filter') === 'api';
Deteksi fitur dan dukungan browser
Saat ini, Chrome 49, Firefox 44, dan Opera 36 mendukung URLSearchParams
.
if ('URLSearchParams' in window) {
// Browser supports URLSearchParams
}
Untuk polyfill, sebaiknya gunakan polyfill di github.com/WebReflection/url-search-params.
Demo
Coba contoh.
Untuk melihat URLSearchParams
di aplikasi nyata, lihat Generator Iconset desain material Polymer. Saya menggunakannya untuk menyiapkan status awal aplikasi dari deep link. Cukup berguna :)