无法将数组作为形式的参数发送

时间:2019-06-06 06:11:07

标签: jquery

我创建了一个隐藏的表单,并尝试在ajax成功时添加其他输入字段,然后尝试提交此表单。但是,将数组追加到字段中并不合适。

success : function(resp) {
   $('#checkout').append('<input type="text" name="subtotal" value="'+resp.data.subTotal+'" />');
   $('#checkout').append('<input type="text" name="tax" value="'+resp.data.tax+'" />');
   $('#checkout').append('<input type="text" name="times" value="'+resp.data.times+'" />');
}

这样做,输入字段时间变得像

<input type="text" name="times" value="[{"start_date":"2019-06-10","end_date":"2019-06-10","start_time":"08:00:00","end_time":"09:00:00"},{"start_date":"2019-06-11","end_date":"2019-06-11","start_time":"08:00:00","end_time":"09:00:00"},{"start_date":"2019-06-12","end_date":"2019-06-12","start_time":"08:00:00","end_time":"09:00:00"}]"

响应看起来像

{"status":"200","data":{"times":[{"start_date":"2019-06-10","end_date":"2019-06-10","start_time":"08:00:00","end_time":"09:00:00"},{"start_date":"2019-06-11","end_date":"2019-06-11","start_time":"08:00:00","end_time":"09:00:00"},{"start_date":"2019-06-12","end_date":"2019-06-12","start_time":"08:00:00","end_time":"09:00:00"}],"subTotal":300,"tax":24}}

当我提交此表单时,它不是发送时间值。

  

print_r($ _ POST)

Array
(
  [_token] => x8THCiWyxRXnb9T3mKI3ae8XzfKwHicW1SbwBGXS
  [subtotal] => 300
  [tax] => 24
  [times] => [{
)

我想以这种方式将那些时间值发送到服务器。

3 个答案:

答案 0 :(得分:2)

成功响应中的内容将JSON数据字符串化:

 success : function(resp) {
                   let times=JSON.stringify(resp.data.times);

                   $('#checkout').append('<input type="text" name="times" value="'+times+'" />');

}

并在服务器端解码:

 $posted_data = json_decode($_POST['times'], true);

答案 1 :(得分:1)

输入元素的值只能是字符串,因此您需要首先序列化对象,例如转换成JSON:

$('#checkout')
    .append('<input type="text" name="times" value="'
        + JSON.stringify(resp.data.times)
        + '" />');

答案 2 :(得分:1)

您必须将json字符串放在单引号fiddle

$('#checkout').append('<input type="text" id="times" name="times" value=\'' + JSON.stringify(resp.data.times) + '\' />');