Diberikan bentuk berikut:
<form>
<input name="foo" value="bar">
<input name="hello" value="hello world">
</form>
Saya dapat menggunakan $.param( .. )
konstruksi untuk membuat serialisasi:
$.param( $('form input') )
=> foo=bar&hello=hello+world
Bagaimana saya bisa menghilangkan derialisasi String di atas dengan JavaScript dan mendapatkan hash kembali?
Sebagai contoh,
$.magicFunction("foo=bar&hello=hello+world")
=> {'foo' : 'bar', 'hello' : 'hello world'}
Referensi: jQuery.param( obj )
.
javascript
jquery
seb
sumber
sumber
+
. Sekarang menggantikan semuanya!QueryString
. Saya membuat satu tetapi tidak menerima parameter, itu hanya membaca dari window.location.search. Saya ingat orang lain yang menerima parameter ...Jawaban:
Anda harus menggunakan jQuery BBQ 's deparam fungsi. Ini teruji dan didokumentasikan dengan baik.
sumber
Ini adalah versi yang sedikit dimodifikasi dari fungsi yang saya tulis beberapa waktu lalu untuk melakukan sesuatu yang serupa.
sumber
Bagaimana dengan pendekatan fungsional pendek ini?
Contoh:
sumber
field[][]=a&field[0][]=b&field[0][]=c
diproses sebagaimanaObject { field[][]: "a", field[0][]: "c" }
mestinyaresultobject.field[0] = Array [ "a", "b", "c" ]
. Ini adalah perilaku seperti yang diharapkan dari PHP. Solusi @ JackyLi menangani itu.Jawabanku:
sumber
JSON.stringify(geturlargs('fld[2][]=2&fld[][]=3&fld[3][]=4&fld[]=bb&fld[]=cc').fld)
saya mendapatkan{"2":["2"],"3":["4"],"":"cc"}
dan bukan[null,null,[2],[3,4],"bb","cc"]
apa yang saya harapkan (inilah yang akan diberikan PHP kepada saya).Saya menggunakan jawaban David Dorward, dan menyadari bahwa itu tidak berperilaku seperti PHP atau Ruby on Rails bagaimana mereka mengurai params:
1) variabel hanya berupa larik jika diakhiri dengan
[]
, seperti?choice[]=1&choice[]=12
, bukan saat?a=1&a=2
2) ketika ada mulitple params dengan nama yang sama, yang kemudian menggantikan yang sebelumnya, seperti pada server PHP (Ruby on Rails menyimpan yang pertama dan mengabaikan yang lebih baru), seperti
?a=1&b=2&a=3
Jadi mengubah versi David, saya punya:
yang diuji dengan cukup teliti.
sumber
hash[k.substr(0, k.length-2)] = [v];
danhash[k.substr(0, k.length-2)].push(v);
Saya tahu ini adalah utas lama, tetapi mungkin masih ada relevansinya?
Terinspirasi oleh solusi Jacky Li yang baik, saya mencoba sedikit variasi sendiri dengan tujuan untuk juga dapat menangani kombinasi sembarang array dan objek sebagai input. Saya melihat bagaimana PHP akan melakukannya dan mencoba untuk mendapatkan sesuatu yang "serupa" terjadi. Ini kode saya:
Jika fungsi dipanggil tanpa
str
-argumen itu akan dianggapwindow.location.search.slice(1)
sebagai input.Beberapa contoh:
menghasilkan
Sedangkan solusi Jacky Li akan menghasilkan wadah luar
a
sebagai benda biasagetargs()
melihat indeks pertama yang diberikan untuk setiap level untuk menentukan apakah level ini akan menjadi objek (indeks non-numerik) atau array (numerik atau kosong), sehingga menghasilkan output seperti yang ditunjukkan pada daftar di atas (no. 6).Jika objek saat ini adalah array maka
null
s bisa disisipkan dimanapun diperlukan untuk merepresentasikan posisi kosong. Array selalu diberi nomor berurutan dan berbasis 0).Perhatikan, bahwa dalam contoh no. 8 "autoincrement" untuk indeks kosong masih berfungsi, meskipun kita berurusan dengan objek sekarang dan bukan array.
Sejauh saya telah mengujinya,
getargs()
perilaku saya cukup mirip dengan$.deparam()
plugin jQuery hebat Chriss Roger yang disebutkan dalam jawaban yang diterima. Perbedaan utamanya adalah bahwagetargs
berjalan tanpa jQuery dan itu melakukan autoincrement pada objek sementara tidak$.deparam()
akan melakukannya:menghasilkan
Dalam
$.deparam()
indeks[]
diinterpretasikan sebagaiundefined
bukan indeks numerik yang bertambah otomatis.sumber
o[k]=isNaN(idx[0])?{}:[];
dengan maksud membuat array, setiap kali saya menemukan indeks numerik sebagai yang pertama diberikan untuk objek baru. Jika tidak, saya akan membuat objek umum. Terserah Anda untuk memodifikasi bagian kode itu agar lebih sesuai dengan kebutuhan Anda. I. e. sesuatu sepertio[k]={}
harus melakukan trik.Inilah cara Anda membuat fungsi jQuery baru:
sumber
true
agar seseorang dapat memeriksaif (params.redirect)
atau serupa. Jika Anda ingin membedakan antaratrue
dan nilai lain, Anda akan menggunakanif (params.redirect === true)
. Sebuahnull
nilai tidak akan membantu dengan cara apapun yang saya bisa memikirkan. Alasan saya tidak melakukannya seperti David adalah karena saya menghargai konsistensi daripada fleksibilitas. Dengan metodenya saya harus memeriksa apakah nilainya adalah string atau array untuk menggunakan nilainya. Menurut pendapat saya, itu harus selalu berupa string (true
nilai yang dikonversi'true'
menurut saya baik-baik saja), atau selalu berupa array. Saya memilih string./abc?delete
maka saya akan berharap ada entri untukdelete
. Saya tidak melihat perbedaannya? Saya bahkan tidak melihat bagaimana Anda dapat memilih kode lain karena alasan ini, karena kode itu akan menetapkan nilai ke string'undefined'
yang tidak lebih baik. Dan untuk beberapa nilai, ini adalah kasus kesederhanaan vs. fleksibilitas. Saya jarang melihat penggunaan beberapa nilai dalam string kueri, tetapi jika Anda menginginkannya, selalu kembalikan array dengan nilai 1+. Jangan pernah mencampur tipe pengembalian; maka Anda akan harus menghabiskan waktu untuk debug karena apa yang biasanya string tiba-tiba bisa menjadi array.Terima kasih padanya http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
Cukup mudah: D
sumber
?something=1¶m2=value2
menjadi array. Apa yang Anda maksud dengan "tidak berfungsi dengan kotak pilih dengan beberapa opsi"?Inilah implementasi JavaScript saya yang saya gunakan di halaman JScript ASP Classic sisi server ( demo ):
sumber
Gunakan ini :
sumber
Saya datang dengan solusi ini, yang berperilaku seperti fungsi .Net
HttpUtility.ParseQueryString
.Hasilnya, parameter string kueri disimpan di properti sebagai daftar nilai, sehingga
qsObj["param"]
akan sama dengan memanggilGetValues("param")
.Net.Saya harap Anda menyukainya. JQuery tidak diperlukan.
Berikut cara menggunakannya:
Untuk melihat hasil di konsol, ketik saja:
Keluaran:
sumber
Ada satu kalimat yang indah di CSS-Tricks (sumber asli dari Nicholas Ortenzio ):
Bagian yang paling pintar adalah bagaimana ia menggunakan objek fungsi anonim
this
, menambahkan pasangan kunci / nilai untuk setiap kueri dalam string. Meskipun demikian, masih ada ruang untuk perbaikan. Saya telah mengubahnya sedikit di bawah ini, dengan perubahan berikut:Menambahkan penanganan string kosong dan input non-string.
Menangani string berenkode URI (
%40
->@
, dll).Menghapus penggunaan default
document.location.search
saat input kosong.Mengganti nama, membuatnya lebih mudah dibaca, menambahkan komentar.
sumber
Ini benar-benar pertanyaan lama, tetapi karena saya telah datang - orang lain mungkin datang ke posting ini, dan saya ingin sedikit menyegarkan tema ini. Saat ini tidak perlu membuat solusi khusus - ada antarmuka URLSearchParams .
Satu-satunya batasan yang saya tahu - fitur ini tidak didukung di IE / Edge.
sumber
Ini adalah versi saya di Coffeescript. Juga berfungsi untuk url seperti
http://localhost:4567/index.html?hello=[%22world%22]&world=hello#/home
sumber
Ini yang sederhana & ringkas jika Anda hanya ingin cepat mendapatkan parameter dari permintaan GET:
Itu mengubah
menjadi objek seperti
sumber
Membuat representasi serial dari larik atau objek (dapat digunakan sebagai string kueri URL untuk permintaan AJAX).
sumber
jawaban bisa menggunakan sedikit keanggunan jQuery :
garpu di https://gist.github.com/956897
sumber
Anda dapat menggunakan fungsi
.serializeArray()
( Tautan ) dari jQuery itu sendiri. Fungsi ini mengembalikan larik pasangan nilai kunci. Contoh hasil:sumber