【发布时间】:2022-01-03 19:51:38
【问题描述】:
我想通过 AJAX 将多个输入(一个是文本,一个是 select multiple)发送到 PHP 文件。数据通过form serialize正确发送,实际上使用console.log,它显示prod_multi是一个完整的数组,带有选定的选项。问题是当我尝试将prod_multi 的数组值存储在一个变量中时;如果我回显变量,它是空的。你能帮我解决这个问题吗?
这是代码。
HTML
<form id="form_menu">
<div class="row row-24">
<div class="col-sm-12">
<div class="form-wrap form-wrap-validation validation-with-outside-label">
<label class="form-label-outside" for="forms-check-name">Name *</label>
<input class="form-input round-small" id="forms-check-name" type="text" name="name_menu" placeholder="Name" required>
</div>
</div>
<div class="col-sm-12">
<div class="form-wrap form-wrap-validation">
<label class="form-label-outside" for="involve-form-product">Products *</label>
<select class="form-input round-small product" id="involve-form-product" name="prod_multi" multiple required>
<option disabled="disabled" >Products</option>
<option>Prod A</option>
<option>Prod B</option>
<option>Prod C</option>
<option>Prod D</option>
</select>
</div>
</div>
<div class="col-md-6 mt-3">
<input type="submit" class="button button-primary button-xs round-xl button-block form-el-offset-1" value="Add" id="add_menu" name="add_menu">
</div>
</div>
</form>
AJAX
$(document).on('click','#add_menu',function (e) {
var form = $('#form_menu').serialize();
e.preventDefault();
$.ajax({
type: "POST",
url: "file.php",
data: form,
cache: false,
success: function()
{
alert("Ok");
},
error: function()
{
alert("Not ok");
}
});
});
PHP
$array=$_POST["prod_multi"];
$array_length=count($array);
$list=NULL;
$i=0;
foreach($array as $prod)
{
if(++$i == $array_length)
{
$list=$list . $prod;
}
else
{
$list=$list . $prod . ', ';
}
$i++;
}
感谢您的帮助。
【问题讨论】:
-
尝试将值属性添加到选项标签。
<option value="10">Prod A</option> -
尝试使用
$('#form_menu').serializeArray()而不是$('#form_menu').serialize() -
@Kasun 已经尝试过,但它不起作用
-
@LamTranDuc 没有任何改变
-
如果您尝试将数组作为逗号分隔的列表,则无需使用 foreach 自己构建它。您需要做的就是:
$list = implode(', ', $_POST['prod_multi']);。 旁注:我希望你不打算像那样将它存储在数据库中。如果你这样做了,那么你应该阅读数据库规范化以了解如何正确存储它。