Hanya ingin tahu apakah ada bawaan untuk Javascript yang dapat mengambil Formulir dan mengembalikan parameter kueri, misalnya: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Saya sudah bertanya-tanya selama bertahun-tahun.
javascript
string
forms
get
Liam
sumber
sumber
Jawaban:
Saya mencoba mencari jawaban untuk pertanyaan ini beberapa waktu yang lalu, tetapi saya akhirnya menulis fungsi saya sendiri yang mengekstrak nilai dari formulir ..
itu tidak sempurna tetapi sesuai dengan kebutuhan saya.
form_params mengembalikan pemetaan (kunci -> nilai) parameter. input adalah elemen form (DOM Element)
Itu tidak menangani bidang yang memungkinkan banyak pilihan.
sumber
new Array()
untuk menginisialisasi kamus. Tetapi sekali lagi, kodenya terlihat jauh lebih bersih daripada beberapa omong kosong yang akan saya tulis hari ini!Pembaruan 2k20: gunakan solusi Josh dengan URLSearchParams.toString () .
Jawaban lama:
Tanpa jQuery
Untuk browser yang tidak mendukung sintaks fungsi panah yang memerlukan ES5, ubah
.map...
baris menjadisumber
Jika Anda menggunakan jQuery, Anda mungkin ingin memeriksa
jQuery.param()
http://api.jquery.com/jQuery.param/Contoh:
sumber
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
sini github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
API URLSearchParams tersedia di semua browser modern. Sebagai contoh:
sumber
params.append(key, value)
nanti untuk menambahkan params pencarian baru dalam skenario yang lebih rumit.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
), Anda dapat mengatur string kueriurl.search = new URLSearchParams({foo: "bar"})
atauurl.searchParams.append("foo", "bar")
Ini tidak langsung menjawab pertanyaan Anda, tetapi inilah fungsi umum yang akan membuat URL yang berisi parameter string kueri. Parameter (nama dan nilai) dengan aman diloloskan untuk dimasukkan dalam URL.
sumber
new Array
sementara Anda benar-benar menggunakannya sebagai objek? o, ODengan jQuery Anda dapat melakukannya dengan
$.param
sumber
ES2017 (ES8)
Memanfaatkan
Object.entries()
, yang mengembalikan array[key, value]
pasangan objek. Misalnya, untuk{a: 1, b: 2}
itu akan kembali[['a', 1], ['b', 2]]
. Itu tidak didukung (dan tidak akan) hanya oleh IE.Kode:
Contoh:
Hasil:
sumber
Tidak, saya tidak berpikir standar JavaScript sudah ada di dalamnya, tetapi Prototipe JS memiliki fungsi itu (tentunya sebagian besar kerangka kerja JS lainnya juga, tapi saya tidak tahu mereka), mereka menyebutnya serialisasi .
Saya dapat merekomendasikan Prototipe JS, ini berfungsi dengan sangat baik. Satu-satunya kelemahan saya benar-benar memperhatikan itu ukuran (beberapa ratus kb) dan ruang lingkup (banyak kode untuk ajax, dom, dll.). Jadi jika Anda hanya ingin bentuk serializer itu berlebihan, dan secara tegas jika Anda hanya ingin itu fungsi Ajax (yang terutama apa yang saya gunakan untuk itu) itu berlebihan. Kecuali jika Anda berhati-hati, Anda mungkin menemukan bahwa itu melakukan sedikit "sihir" (seperti memperluas setiap elemen dom yang disentuhnya dengan fungsi Prototipe JS hanya untuk menemukan elemen) membuatnya lambat pada kasus-kasus ekstrim.
sumber
querystring dapat membantu.
Jadi kamu bisa
sumber
Jika Anda tidak ingin menggunakan pustaka, ini harus mencakup sebagian besar / semua jenis elemen formulir yang sama.
sumber
Anda sebenarnya tidak memerlukan formulir untuk melakukan ini dengan Prototipe. Cukup gunakan fungsi Object.toQueryString :
sumber
Anda dapat melakukannya saat ini dengan
FormData
danURLSearchParams
tanpa perlu mengulang apa pun.Peramban yang lebih lama akan membutuhkan polyfill.
sumber
Saya sendiri tidak sepenuhnya yakin, saya ingat melihat jQuery melakukannya sampai batas tertentu, tetapi tidak menangani catatan hierarki sama sekali, apalagi dengan cara yang bersahabat dengan php.
Satu hal yang saya tahu pasti, adalah ketika membangun URL dan menempelkan produk ke dom, jangan hanya menggunakan string-lem untuk melakukannya, atau Anda akan membuka diri Anda ke pemecah halaman yang berguna.
Misalnya, perangkat lunak periklanan tertentu memasukkan string versi dari apa pun yang menjalankan flash Anda. Ini baik-baik saja ketika adobesnya menggunakan string sederhana yang umum, tetapi bagaimanapun, itu sangat naif, dan meledak dalam kekacauan yang memalukan bagi orang-orang yang telah menginstal Gnash, karena string versi gnash'es kebetulan berisi lisensi hak cipta GPL yang penuh sesak, lengkap dengan URL dan <a href> tag. Dengan menggunakan ini di generator pengiklan string-lem Anda, menghasilkan halaman membuka dan memiliki HTML yang tidak seimbang muncul di dom.
Moral cerita:
Tidak:
Google perlu mempelajari trik ini. Saya mencoba melaporkan masalah, mereka tampaknya tidak peduli.
sumber
Seperti kata Stein, Anda dapat menggunakan prototipe perpustakaan javascript dari http://www.prototypejs.org . Sertakan JS dan itu sangat sederhana,
$('formName').serialize()
akan mengembalikan apa yang Anda inginkan!sumber
Bagi kita yang lebih suka jQuery, Anda akan menggunakan plugin form: http://plugins.jquery.com/project/form , yang berisi metode formSerialize.
sumber
Mungkin sedikit berlebihan tetapi cara terbersih yang saya temukan yang didasarkan pada beberapa jawaban di sini:
Sumber
sumber
Jawaban ini sangat membantu, tetapi saya ingin menambahkan jawaban lain, yang dapat membantu Anda membangun URL lengkap. Hal ini dapat membantu Anda concat dasar
url
,path
,hash
danparameters
.Anda dapat mengunduh melalui npm https://www.npmjs.com/package/build-url
Demo:
sumber
Saya tahu ini adalah jawaban yang sangat terlambat tetapi bekerja dengan sangat baik ...
catatan: object.entries akan mengembalikan kunci, nilai pasangan
Semoga ini bisa membantu seseorang.
Selamat Coding ...
sumber
Apakah mungkin sudah terlambat untuk menjawab pertanyaan Anda.
Saya memiliki pertanyaan yang sama dan saya tidak suka terus menambahkan string untuk membuat URL. Jadi, saya mulai menggunakan $ .param seperti yang dijelaskan oleh techhouse .
Saya juga menemukan perpustakaan URI.js yang membuat URL dengan mudah untuk Anda. Ada beberapa contoh yang akan membantu Anda: URI.js Dokumentasi .
Ini salah satunya:
sumber
sumber