我目前正在编写一个简单的ajax脚本来练习我的ajax技能,我使用 serializeArray()方法通过ajax提交表单我能够成功传递但不能执行任何操作数据。 这是我目前使用的ajax脚本
var submit_post = $("#submit-post");
$(submit_post).on('click',function (e)
{
e.preventDefault();
$.ajax(
{
method:'POST',
data:
{
form:JSON.stringify($("#emp-post-form").serializeArray())
},success:function(data)
{
console.log(data);
},dataType:'text'
})
})
在后端我按照以下方式处理数据
if(isset($_POST['form']))
{
$form_data = [];
$form_data = json_decode(stripslashes($_POST['form']),true);
var_dump($form_data);
}
当我发布var_dump()数据时,以下是我数据的格式
Array
(
[0] => Array
(
[name] => emp-id-list
[value] => 1248
)
[1] => Array
(
[name] => emp-first-name
[value] => John
)
[2] => Array
(
[name] => emp-last-name
[value] => King
)
[3] => Array
(
[name] => title
[value] => Post title
)
[4] => Array
(
[name] => post-content
[value] => Some Post
)
)
但是我如何使用这些数据,例如,如果我想要echo标题名称,以下代码将不起作用
echo $ _POST ['title'];
为了使用它,我该怎么办呢?
PS:我已经成功使用序列化(),然后在php中使用parse_str()但是因为我正在学习我只需要回答这个问题,而不是替代它
答案 0 :(得分:2)
简化整个过程并使用serialize()
对整个表单进行编码,方式与发送时相同,而不使用ajax
$.ajax({
url:'...',
method: 'POST',
data: $("#emp-post-form").serialize(),
success: function(data) {
console.log(data);
},
dataType: 'text'
})
然后,表单元素中的所有name
将直接在$_POST
$title= $_POST['title'];
$emp_fName = $_POST['emp-first-name'];
答案 1 :(得分:1)
鉴于$_POST['form']
提供的$("#emp-post-form").serializeArray()
的(繁琐)数据结构,您可以将服务器端转换为由原始表单元素名称键入的PHP关联数组:
$form_data = array();
if(isset($_POST['form']))
{
$raw_form_data = json_decode(stripslashes($_POST['form']), true);
foreach($raw_form_data, true) as $item) {
$form_data[$item['name']] = $item['value'];
};
}
现在你有一个可以按照你想要的方式直接寻址的数组:
echo $form_data['emp-id-list']; // 1248
echo $form_data['emp-first-name']; // John
echo $form_data['emp-last-name']; // King
echo $form_data['title']; // Post title
echo $form_data['post-content']; // Some Post
答案 2 :(得分:0)
要获得标题,如果您知道可以执行的密钥
$title = $form_data[3]['value'];
如果你不这样做,你可以循环使用它:
foreach($form_data as $input){
if($input['name'] == 'title'){
$title = $input['value'];
}
}