嘿伙計們,當我選擇多個復選框時,序列化沒有將它們放入陣列中,這是結果
產品類別=29&產品類別=27
我希望它是那樣的
產品類別=29,27
這是我的 php 代碼:
<form id="myform">
<fieldset>
<label>Categorys</label>
<?php
$cats = get_terms([
'taxonomy' => 'product_cat',
'hide_empty' => false,
]);
?>
<?php foreach($cats as $cat) : ?>
<input type="checkbox" id="product-category-checkbox" name="product-category" value="<?php echo $cat->term_id; ?>">
<?php endforeach; ?>
</fieldset>
</form>
這是js代碼:
<script>
(function($){
$(document).ready(function(){
$(document).on('submit', '#myform', function(e) {
e.preventDefault();
var data = $(this).serialize();
console.log(data);
var settings = {
"url": "<?php echo WC_AJAX::get_endpoint( 'kia_search' ) ?>",
"method": "POST",
"data": data
}
$.ajax(settings).done(function (response) {
$('.products').html(response);
});
});
});
})(jQuery);
</script>
uj5u.com熱心網友回復:
與其直接通過 序列化資料.serialize(),不如使用.serializeArray()以陣列形式獲取資料。您可以操作陣列,然后使用$.param().
所以洗掉下面的行,讓它更有活力
var data = $(this).serialize();
像這樣。這是為了確保即使以后添加更多表單元素,也無需更改代碼。
<script>
(function($){
$(document).ready(function(){
$(document).on('submit', '#myform', function(e) {
e.preventDefault();
// get data
var data = $(this).serializeArray();
// get 'product-category` values from array and join them
var categories = data.filter(obj => obj.name === 'product-category').map(obj => obj.value).join(',');
// add the joined 'product-category' back to data
if( categories.length > 0 ){
data = data.filter(obj => obj.name !== 'product-category')
.concat({name: 'product-category', value: categories});
}
// serialize data
data = $.param(data);
console.log(data);
var settings = {
"url": "<?php echo WC_AJAX::get_endpoint( 'kia_search' ) ?>",
"method": "POST",
"data": data
}
$.ajax(settings).done(function (response) {
$('.products').html(response);
});
});
});
})(jQuery);
</script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/424080.html
標籤:javascript php html jQuery 阿贾克斯
