Apakah Anda tahu cara cepat dan sederhana untuk menyandikan Obyek Javascript ke dalam string
yang dapat saya sampaikan melalui GET
Permintaan?
Tidak jQuery
, tidak ada kerangka kerja lain - Javascript biasa :)
javascript
query-string
urlencode
napolux
sumber
sumber
URLSearchParams
sekarang ...Jawaban:
seperti ini?
Sunting: yang ini juga mengonversi objek rekursif (menggunakan notasi "array" php untuk string kueri)
sumber
jQuery memiliki fungsi untuk ini,,
jQuery.param()
jika Anda sudah menggunakannya Anda dapat menggunakannya: http://api.jquery.com/jquery.param/contoh:
str
sekarang berisiwidth=1680&height=1050
sumber
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Hasil dalam"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Yang, meskipun benar, mungkin bukan yang Anda harapkan.Cukup gunakan
URLSearchParams
Ini berfungsi di semua browser saat inisumber
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
objek bersarang sebelum Anda bisaURLSearchParams
Sunting: Saya suka one-liner ini, tapi saya yakin itu akan menjadi jawaban yang lebih populer jika cocok dengan jawaban yang diterima secara semantik:
sumber
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
hanya tersedia di IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Berikut ini adalah satu liner di ES6:
sumber
export?actions[]=finance,create,edit
ketika seharusnya memilikiexport?actions[]=finance&actions[]=create&actions[]=edit
standar yang mengerikan.actions[]
adalah notasi PHP;action
Sebagai gantinya, Django menggunakan banyak (tanpa[]
akhiran); beberapa ORM / CMS lain memerlukan daftar yang dipisahkan koma, dll. Jadi "jika ini bukan string sederhana, pertama pastikan Anda tahu apa yang bahkan diinginkan server Anda".Dengan Node.js v6.6.3
Referensi: https://nodejs.org/api/querystring.html
sumber
Saya sarankan menggunakan
URLSearchParams
antarmuka:Atau dengan mengirimkan objek pencarian ke konstruktor seperti ini:
sumber
Amandemen kecil untuk solusi yang diterima oleh user187291:
Memeriksa hasOwnProperty pada objek membuat JSLint / JSHint senang, dan mencegah metode serialisasi objek atau benda lainnya secara tidak sengaja jika objek tersebut bukan kamus sederhana. Lihat paragraf tentang pernyataan di halaman ini: http://javascript.crockford.com/code.html
sumber
Nah, semua orang sepertinya meletakkan satu-linernya di sini jadi ini milikku:
sumber
Apakah Anda perlu mengirim objek yang sewenang-wenang? Jika demikian, GET adalah ide yang buruk karena ada batasan panjang URL yang akan diterima oleh agen pengguna dan server web. Saran saya adalah membangun array pasangan nama-nilai untuk dikirim dan kemudian membangun string kueri:
sumber
Pembuat Kueri Rel / Gaya PHP
Metode ini mengubah objek Javascript menjadi
URI Query String
. Juga menangani array dan objek bersarang (dalamRails
/PHP
sintaks):Contoh penggunaan:
sumber
function
untuk mengecualikanfalsy
nilai (null, undefined, NaN, '') ...gunakan JSON.
lihat pertanyaan ini untuk ide-ide tentang bagaimana mengimplementasikan.
sumber
Inilah versi coffeescript dari jawaban yang diterima. Ini mungkin menghemat waktu untuk seseorang.
sumber
Berikut ini adalah versi ringkas & rekursif dengan Object.entries . Ini menangani array bersarang sewenang-wenang, tetapi tidak objek bersarang. Itu juga menghilangkan elemen kosong:
Misalnya:
sumber
Yang ini melompati nilai null / undefined
sumber
Di ES7 Anda dapat menulis ini dalam satu baris:
sumber
Satu baris untuk mengubah Objek menjadi String Kueri jika seseorang membutuhkannya lagi
sumber
Saya punya solusi yang lebih sederhana yang tidak menggunakan perpustakaan pihak ketiga mana pun dan sudah cenderung untuk digunakan di browser apa pun yang memiliki "Object.keys" (alias semua browser modern + edge + ie):
Dalam ES5
Dalam ES3
sumber
Jika Anda ingin mengkonversi objek bersarang secara berulang dan objek mungkin atau mungkin tidak mengandung array (dan array mungkin berisi objek atau array, dll), maka solusinya menjadi sedikit lebih kompleks. Ini usaha saya.
Saya juga telah menambahkan beberapa opsi untuk memilih jika Anda ingin merekam untuk setiap anggota objek pada kedalaman apa di objek utama yang duduk, dan untuk memilih jika Anda ingin menambahkan label ke anggota yang berasal dari array yang dikonversi.
Idealnya Anda harus menguji apakah parameter benda benar-benar menerima objek atau array.
sumber
Selain untuk solusi yang diterima, ini bekerja dengan objek & array objek:
Juga telah menambahkan objName jika Anda menggunakan parameter objek seperti pada metode aksi asp.net mvc.
sumber
Sedikit terlihat lebih baik
sumber
Saya membuat perbandingan pengali JSON dan hasilnya adalah sebagai berikut:
Yang terpendek di antara mereka adalah Notasi Objek URL .
sumber
ok, ini posting yang lebih tua tapi saya menghadapi masalah ini dan saya telah menemukan solusi pribadi saya .. mungkin dapat membantu orang lain ..
sumber
Jawaban di atas tidak berfungsi jika Anda memiliki banyak objek bersarang. Alih-alih, Anda dapat memilih fungsi param dari sini - https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js Ini berfungsi sangat baik untuk saya!
sumber
SOLUSI ES6 UNTUK PENCARIAN QUERY STRING DARI OBYEK JAVASCRIPT
sumber
Ini adalah solusi yang akan bekerja untuk .NET backends di luar kotak. Saya telah mengambil jawaban utama utas ini dan memperbaruinya agar sesuai dengan kebutuhan .NET kami.
sumber
Saya telah menulis sebuah paket hanya untuk itu: object-query-string :)
Mendukung objek bersarang, array, fungsi penyandian khusus dll. Ringan & jQuery gratis.
kembali
sumber
Hanya cara lain (tidak ada objek rekursif):
sumber
Rujuk dari answer @ user187291, tambahkan "isArray" sebagai parameter untuk membuat json nested array dikonversi.
Untuk membuat hasilnya:
staffId = 00000001 & Detail [0] .identityId = 123456 & Detail [1] .identityId = 654321
sumber
Anda juga dapat mencapai ini dengan menggunakan JavaScript sederhana .
sumber