jQuery/Php 错误来自未序列化 post 数据的非法字符串偏移量
jQuery/Php Error Illegal string offset from unserialized post data
我正在发布一个 jquery 从 modal/pop 向上 div 标记发布的序列化数据,名称属性如 formdata[1]field_x
<div class="modal fade show" id="modal-payref-settings" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="modal-paycode-detailsLabel" aria-modal="true" role="dialog" style="padding-right: 17px; display: block;">
<div class="modal-dialog modal-dialog-scrollableX "><div class="modal-content ">
<div class="modal-body ">
<input type="text" name="formdata[1]payref_autonum" class="form-control dropdown-vw-item-text input-payref-autonum ">
<input type="text" name="formdata[1]payref_prefix" class="form-control input-payref input-payref-prefix text-end">
<input type="text" name="formdata[1]payref_suffix" class="form-control input-payref input-payref-suffix text-end">
<input type="text" name="formdata[1]payref_pad" class="form-control input-payref input-payref-num-pad text-end" value="4">
<input type="text" name="formdata[1]payref_next" class="form-control input-payref input-payref-num text-end" value="876">
<input type="text" name="formdata[1]payref_sample" class="form-control input-payref-sample text-end" placeholder="Sample" aria-label="Sample" readonly="">
</div>
<!-- modal-body ends -->
</div>
</div>
</div>
$.ajax({
type: 'POST',
url: 'model/trcode.php',
data: {
'a': 'SAVE_PAYREF',
'formdata':$('#modal-payref-settings').find('[name^="formdata"]').serialize(),
},
// dataType: "JSON",
success: function (jsonStr) {
alert(jsonStr);
}
});
Fetch/XHR 捕获序列化的发布数据,这表明发布是正确的。 return 与 print_r($_POST["formdata"] );
.
的结果相同
formdata%5B1%5Dpayref_autonum=Yes&formdata%5B1%5Dpayref_prefix=P2022&formdata%5B1%5Dpayref_suffix=&formdata%5B1%5Dpayref_pad=4&formdata%5B1%5Dpayref_next=876&formdata%5B1%5Dpayref_sample=
数据正在反序列化parse_str($_POST["formdata"], $formdata );
。但是 $formdata
return 一个空数组。
(
[formdata] => Array
(
[1] =>
)
)
您正在尝试将字符串用作完整数组
您可以将 ajax 代码更改为
$.ajax({
type: 'POST',
url: 'model/trcode.php',
data: {
'a': 'SAVE_PAYREF',
'formdata':$('#modal-payref-settings').find('[name^="formdata"]').serialize(),
},
dataType: "JSON",
contentType: false,
cache: false,
processData:false,
success: function (jsonStr) {
console.log(jsonStr);
}
});
在 model/trcode.php 页面内您可以通过
echo json_encode($_POST["formdata"]);
如果使用 alert(jsonStr) 而不是 console.log(jsonStr),您有时不会得到实际输出,因为您正在传递对象。
问题是您的表单字段 name
属性不是数组(您认为它是一个数组,但存在语法错误)。要解决此问题,请执行以下操作:
像这样更改名称:formdata[1][payref_autonum]
等等。
我正在发布一个 jquery 从 modal/pop 向上 div 标记发布的序列化数据,名称属性如 formdata[1]field_x
<div class="modal fade show" id="modal-payref-settings" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="modal-paycode-detailsLabel" aria-modal="true" role="dialog" style="padding-right: 17px; display: block;">
<div class="modal-dialog modal-dialog-scrollableX "><div class="modal-content ">
<div class="modal-body ">
<input type="text" name="formdata[1]payref_autonum" class="form-control dropdown-vw-item-text input-payref-autonum ">
<input type="text" name="formdata[1]payref_prefix" class="form-control input-payref input-payref-prefix text-end">
<input type="text" name="formdata[1]payref_suffix" class="form-control input-payref input-payref-suffix text-end">
<input type="text" name="formdata[1]payref_pad" class="form-control input-payref input-payref-num-pad text-end" value="4">
<input type="text" name="formdata[1]payref_next" class="form-control input-payref input-payref-num text-end" value="876">
<input type="text" name="formdata[1]payref_sample" class="form-control input-payref-sample text-end" placeholder="Sample" aria-label="Sample" readonly="">
</div>
<!-- modal-body ends -->
</div>
</div>
</div>
$.ajax({
type: 'POST',
url: 'model/trcode.php',
data: {
'a': 'SAVE_PAYREF',
'formdata':$('#modal-payref-settings').find('[name^="formdata"]').serialize(),
},
// dataType: "JSON",
success: function (jsonStr) {
alert(jsonStr);
}
});
Fetch/XHR 捕获序列化的发布数据,这表明发布是正确的。 return 与 print_r($_POST["formdata"] );
.
formdata%5B1%5Dpayref_autonum=Yes&formdata%5B1%5Dpayref_prefix=P2022&formdata%5B1%5Dpayref_suffix=&formdata%5B1%5Dpayref_pad=4&formdata%5B1%5Dpayref_next=876&formdata%5B1%5Dpayref_sample=
数据正在反序列化parse_str($_POST["formdata"], $formdata );
。但是 $formdata
return 一个空数组。
(
[formdata] => Array
(
[1] =>
)
)
您正在尝试将字符串用作完整数组
您可以将 ajax 代码更改为
$.ajax({
type: 'POST',
url: 'model/trcode.php',
data: {
'a': 'SAVE_PAYREF',
'formdata':$('#modal-payref-settings').find('[name^="formdata"]').serialize(),
},
dataType: "JSON",
contentType: false,
cache: false,
processData:false,
success: function (jsonStr) {
console.log(jsonStr);
}
});
在 model/trcode.php 页面内您可以通过
echo json_encode($_POST["formdata"]);
如果使用 alert(jsonStr) 而不是 console.log(jsonStr),您有时不会得到实际输出,因为您正在传递对象。
问题是您的表单字段 name
属性不是数组(您认为它是一个数组,但存在语法错误)。要解决此问题,请执行以下操作:
像这样更改名称:formdata[1][payref_autonum]
等等。