Apabila menggunakan permintaan Ajax jQuery, kami sering menggunakan kaedah $.param untuk menyerikan objek ke dalam rentetan pertanyaan untuk memudahkan penghantaran data. Kaedah $.param secara automatik mengekod data, contohnya, menukar ruang kepada %20. Walau bagaimanapun, kadangkala kami ingin mensirikan objek tanpa pengekodan URL dan mengekalkannya seperti sedia ada. Artikel ini akan memperkenalkan cara menggunakan kaedah $.param tanpa pengekodan URL.
Pertama, mari kita lihat penggunaan asas kaedah $.param. Katakan kita mempunyai objek berikut:
var data = { name: 'John Doe', age: 30, company: 'ABC Inc.', address: { street: '123 Main St', city: 'Anytown', state: 'CA', zip: '12345' } };
Kita boleh menggunakan kaedah $.param untuk mensirikannya ke dalam rentetan pertanyaan, seperti yang ditunjukkan di bawah:
var queryString = $.param(data); // queryString 的值为: // "name=John%20Doe&age=30&company=ABC%20Inc.&address%5Bstreet%5D=123%20Main%20St&address%5Bcity%5D=Anytown&address%5Bstate%5D=CA&address%5Bzip%5D=12345"
Seperti yang anda lihat, $.param Kaedah URL mengekod objek, menukar ruang kepada %20 dan mengekod beberapa aksara khas. Jika kita ingin mengekalkan rupa asal, kita perlu menggunakan sedikit muslihat.
Pertama, kita perlu mentakrifkan fungsi yang tidak melaksanakan pengekodan URL, seperti berikut:
function serializeParam(obj) { var str = []; for (var p in obj) { if (obj.hasOwnProperty(p)) { str.push(encodeURIComponent(p) + '=' + obj[p]); } } return str.join('&'); }
Fungsi fungsi ini adalah untuk menukar objek kepada rentetan, yang tidak melaksanakan pengekodan URL. Seterusnya, kita boleh menggunakan fungsi ini untuk menyerikan objek ke dalam rentetan pertanyaan, seperti yang ditunjukkan di bawah:
var queryString = Object.keys(data).map(function(key) { var value = data[key]; if (typeof value === 'object') { value = serializeParam(value).replace(/%20/g, '+'); } return encodeURIComponent(key) + '=' + value; }).join('&'); // queryString 的值为: // "name=John Doe&age=30&company=ABC Inc.&address[street]=123 Main St&address[city]=Anytown&address[state]=CA&address[zip]=12345"
Seperti yang anda lihat, rentetan pertanyaan yang dijana oleh kaedah ini bukan dikodkan URL, tetapi Spaces adalah digantikan dengan tanda tambah. Oleh itu, jika pelayan yang menerima data boleh menyokong kaedah penghantaran ini, kita boleh menggunakan kaedah ini.
Ringkasnya, kami boleh menyerikan objek dalam jQuery tanpa pengekodan URL dengan menggunakan fungsi tersuai untuk memenuhi keperluan khusus kami.
Atas ialah kandungan terperinci Cara menggunakan kaedah $.param tanpa pengekodan URL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!