Dalam aplikasi web yang memanfaatkan panggilan AJAX, saya perlu mengirimkan permintaan tetapi menambahkan parameter ke akhir URL, misalnya:
URL asli:
URL yang dihasilkan:
http: //server/myapp.php? id = 10 & enabled = true
Mencari fungsi JavaScript yang mem-parsing URL melihat setiap parameter, lalu menambahkan parameter baru atau memperbarui nilainya jika sudah ada.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
sumber
sumber
Jawaban:
Implementasi dasar yang perlu Anda adaptasi akan terlihat seperti ini:
Ini kira-kira dua kali lebih cepat dari regex atau solusi berbasis pencarian, tetapi itu tergantung sepenuhnya pada panjang querystring dan indeks dari setiap kecocokan
metode regex lambat yang saya tolak untuk penyelesaian (kira-kira 150% lebih lambat)
sumber
encodeURIComponent
bukanencodeURI
? Kalau tidak, karakter seperti apa pun=
,&
dengan nama atau nilai Anda akan merusak URI.Anda dapat menggunakan salah satu dari ini:
Contoh:
sumber
XML
kehttp://foo.bar/?x=1&y=2
sehingga hasil akhirnya adalahhttp://foo.bar/?x=1&y=2&XML
. Apakah ini mungkin? Saya mencobaurl.searchParams.set('XML');
,,url.searchParams.set('XML', null);
danurl.searchParams.set('XML', undefined);
- tetapi tidak ada yang berhasil di Chrome 63 .Terima kasih atas kontribusi Anda. Saya menggunakan kode annakata dan dimodifikasi untuk memasukkan kasus di mana tidak ada string kueri di url sama sekali. Semoga ini bisa membantu.
sumber
escape(key)
danescape(value)
keencodeURIComponent
fungsi.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
Ini solusi yang sangat sederhana. Ini tidak mengontrol keberadaan parameter, dan itu tidak mengubah nilai yang ada. Itu menambahkan parameter Anda ke akhir, sehingga Anda bisa mendapatkan nilai terbaru dalam kode back-end Anda.
sumber
url = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+part+"&"+url.split("?")[1] : (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+part+"#"+ url.split("#")[1] : url+'?'+part));
function appendQs(url, key, value) { return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value); };
https://localhost/preview/inventory.html?sortci=priceASC&sortci=priceASC&sortci=stitle
.Berikut ini adalah versi yang sangat disederhanakan, membuat pengorbanan untuk keterbacaan dan lebih sedikit baris kode daripada kinerja yang dioptimalkan secara mikro (dan kami berbicara tentang beberapa perbedaan milidetik, secara realistis ... karena sifat dari ini (beroperasi pada lokasi dokumen saat ini) ), ini kemungkinan besar akan dijalankan sekali di halaman).
Anda kemudian akan menggunakan ini seperti ini:
sumber
[\?&]
dengan([\?&])
di RegExp (saya hanya mengeditnya sendiri tapi saya tidak yakin apakah kebijakan komunitas memungkinkan memperbaiki bug dalam jawaban).Dan harap dicatat bahwa parameter harus dikodekan sebelum ditambahkan dalam string kueri.
http://jsfiddle.net/48z7z4kx/
sumber
http://abc.def/?a&b&b
)..set agrument pertama adalah kuncinya, yang kedua adalah nilainya.
sumber
Saya memiliki 'kelas' yang melakukan ini dan ini dia:
Saya telah mengganti metode toString sehingga tidak perlu memanggil QS :: getQueryString, Anda dapat menggunakan QS :: toString atau, seperti yang telah saya lakukan dalam contoh hanya mengandalkan objek yang dipaksa menjadi string.
sumber
Jika Anda memiliki string dengan url yang ingin Anda hias dengan param, Anda bisa mencoba ini:
Ini artinya ? akan menjadi awalan dari parameter, tetapi jika Anda sudah punya ? di
urlstring
, daripada & akan menjadi awalan.Saya juga akan merekomendasikan untuk melakukannya
encodeURI( paramvariable )
jika Anda tidak melakukan hardcoded parameter, tetapi di dalamparamvariable
; atau jika Anda memiliki karakter lucu di dalamnya.Lihat Pengkodean URL javascript untuk penggunaan
encodeURI
fungsi ini.sumber
Ini adalah cara sederhana untuk menambahkan parameter kueri:
Dan itu lebih di sini .
Harap perhatikan spesifikasi dukungannya .
sumber
Periksa https://github.com/derek-watson/jsUri
Uri dan kueri manipulasi string dalam javascript.
Proyek ini menggabungkan parseUri regular expression library yang sangat baik oleh Steven Levithan. Anda dapat mem-parsing URL dengan aman dari semua bentuk dan ukuran, namun tidak valid atau mengerikan.
sumber
Kadang-kadang kita melihat
?
di URL akhir, saya menemukan beberapa solusi yang menghasilkan sebagaifile.php?&foo=bar
. saya datang dengan solusi saya sendiri bekerja dengan sempurna seperti yang saya inginkan!Catatan: location.origin tidak berfungsi di IE, berikut ini perbaikannya .
sumber
Fungsi berikut akan membantu Anda menambah, memperbarui, dan menghapus parameter ke atau dari URL.
// example1and
// example2
// example3
// example4
// example5
Inilah fungsinya.
sumber
Ini adalah usaha saya sendiri, tetapi saya akan menggunakan jawabannya oleh annakata karena tampaknya lebih bersih:
Juga, saya menemukan plugin jQuery ini dari posting lain di stackoverflow, dan jika Anda membutuhkan lebih banyak fleksibilitas Anda dapat menggunakannya: http://plugins.jquery.com/project/query-object
Saya pikir kodenya (belum diuji):
sumber
Menambahkan ke @ Vianney's Answer https://stackoverflow.com/a/44160941/6609678
Kami dapat mengimpor modul URL Bawaan dalam simpul sebagai berikut
Contoh:
Tautan Berguna:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
sumber
Coba ini.
sumber
url.searchParams
adalah daftar parameter yang diinisialisasi untukURL
objek itu.Saya suka jawaban Mehmet Fatih Yıldız bahkan dia tidak menjawab seluruh pertanyaan.
Sejalan dengan jawabannya, saya menggunakan kode ini:
"Ini tidak mengontrol keberadaan parameter, dan itu tidak mengubah nilai yang ada. Itu menambah parameter Anda sampai akhir"
dan penguji:
sumber
Aku akan pergi dengan ini perpustakaan kecil tapi lengkap untuk menangani url di js:
https://github.com/Mikhus/jsurl
sumber
Inilah yang saya gunakan ketika datang ke beberapa penambahan param url dasar atau pembaruan di sisi server seperti Node.js.
CoffeScript:
JavaScript:
sumber
Solusi termudah, berfungsi jika Anda sudah memiliki tag atau belum, dan menghapusnya secara otomatis sehingga tidak akan terus menambahkan tag yang sama, bersenang-senanglah
KEMUDIAN
sumber
Jawaban Vianney Bajart benar; namun, URL hanya akan berfungsi jika Anda memiliki URL lengkap dengan port, host, path, dan query:
Dan URLSearchParams hanya akan berfungsi jika Anda hanya meneruskan string kueri:
Jika Anda memiliki URL yang tidak lengkap atau relatif dan tidak peduli dengan URL dasar, Anda bisa membaginya dengan
?
mendapatkan string kueri dan bergabung nanti seperti ini:Tidak kompatibel dengan Internet Explorer.
sumber
var u = new URL(window.location), usp = u.searchParams;
Anda tidak harus menggunakan string-splitting mewah.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Jika Anda bermain-main dengan url di tautan atau tempat lain, Anda mungkin harus mempertimbangkan hash juga. Berikut ini adalah solusi yang cukup sederhana untuk dipahami. Mungkin bukan TERCEPAT karena menggunakan regex ... tetapi dalam 99,999% kasus, perbedaannya benar-benar tidak masalah!
sumber
Solusi paling sederhana yang dapat saya pikirkan adalah metode ini, yang akan mengembalikan URI yang dimodifikasi. Saya merasa sebagian besar dari Anda bekerja terlalu keras.
sumber
Ok di sini saya membandingkan Dua fungsi, satu dibuat sendiri (regExp) dan satu lagi dibuat oleh (annakata).
Array terpisah:
Metode Regexp:
Kasus pengujian:
Tampaknya bahkan dengan solusi paling sederhana (ketika regexp hanya menggunakan tes dan tidak masuk fungsi. Ganti) masih lebih lambat daripada membelah ... Yah. Regexp agak lambat tapi ... uhh ...
sumber
Inilah yang saya lakukan. Dengan menggunakan fungsi editParams () saya, Anda dapat menambah, menghapus, atau mengubah parameter apa pun, lalu menggunakan fungsi replState () bawaan untuk memperbarui URL:
sumber
Yang terbaik yang saya bisa katakan tidak satupun dari jawaban di atas mengatasi kasus di mana string kueri berisi parameter yang merupakan array dan karenanya akan muncul lebih dari sekali, misalnya:
Fungsi berikut adalah apa yang saya tulis untuk memperbarui
document.location.search
. Dibutuhkan array array kunci / nilai sebagai argumen dan itu akan mengembalikan versi revisi dari yang Anda dapat melakukan apa pun yang Anda suka. Saya menggunakannya seperti ini:Jika url saat ini adalah:
http://example.com/index.php?test=replaceme&sizes[]=XL
Ini akan membantu Anda
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Fungsi
sumber
Coba
Ekspresi reguler, jadi lambat, jadi:
Contoh:
sumber
Dengan pencapaian baru di JS di sini adalah bagaimana seseorang dapat menambahkan param kueri ke URL:
Lihat juga kemungkinan ini Moziila URLSearchParams.append ()
sumber
Ini akan bekerja di semua browser modern.
sumber
Setel ulang semua string kueri
sumber