【问题标题】:Send multiple select + text via AJAX to PHP and store content in variable通过 AJAX 向 PHP 发送多个选择 + 文本并将内容存储在变量中
【发布时间】: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++;
}

感谢您的帮助。

【问题讨论】:

  • 尝试将值属性添加到选项标签。 &lt;option value="10"&gt;Prod A&lt;/option&gt;
  • 尝试使用$('#form_menu').serializeArray() 而不是$('#form_menu').serialize()
  • @Kasun 已经尝试过,但它不起作用
  • @LamTranDuc 没有任何改变
  • 如果您尝试将数组作为逗号分隔的列表,则无需使用 foreach 自己构建它。您需要做的就是:$list = implode(', ', $_POST['prod_multi']);。 旁注:我希望你不打算像那样将它存储在数据库中。如果你这样做了,那么你应该阅读数据库规范化以了解如何正确存储它。

标签: php html jquery ajax


【解决方案1】:

添加括号将有助于 PHP 正确处理数据

name="prod_multi[]"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2018-09-24
    • 2021-09-20
    相关资源
    最近更新 更多