我通过AJAX将动态添加的表单元素发布到PHP。
我可以看到序列化的表单数据被发布到php,但是当我尝试访问其中的数据时,一些字段出现NULL,即下面的PHP中的var_dump显示为NULL。
这是添加动态元素的Jquery:
$(function(){
var count=0;
$('#more_edu').click(function(){
count ++;
$('#education_add').append('<br><br><label>University/Institution: </label><input type="text" class="searchbox" id="edu_inst'+count+'" name="edu_inst[]" maxlength="200" value="">);
event.preventDefault();
});
});
和Jquery发布到php:
function profileSub(){
var myform;
event.preventDefault();
myform = $('form').serialize();
$.ajax({
type: 'POST',
url: 'tutorprofileinput.php',
data: {"form": myform},
success:function(data, response, xhr){
console.log(response);
console.log(data);
console.log(xhr);
},
error:function(){
// failed request; give feedback to user
$('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
}
});
}
这是原始形式:
<form id="tutor_profile_input" onsubmit="return false;">
<label>University/Institution: </label>
<input type="text" class="searchbox" id="edu_inst" name="edu_inst[]" maxlength="200" value=""> </br></br>
<label>Subject:</label>
<input type="text" class="searchbox" id="edu_subj" name="edu_subject[]" maxlength="200" value=""></br></br>
<label> Level </label>
<select id="edu_level" name="edu_level[]">
和PHP本身:
<?php
if (isset($_POST['form'])){
$form = $_POST['form'];
var_dump($_POST["edu_inst"]);?>
这是整个$ _POST的var转储:
位置=安培;价格=安培; tutorname =安培; edu_inst%5B%5D = Uni1&安培; edu_subject%5B%5D = subje1&安培; edu_level%5B%5D = BA&安培; edu_inst%5B%5D = UNI2&安培; edu_subject%5B %5D = subj2&安培; edu_level%5B%5D = BA&安培;生物=%09&安培; EXPER
答案 0 :(得分:0)
您发布的表单的ID为#tutor_profile_input
,其中您在jQuery函数中附加的是#education_add
- 除非我误解了?
否则我会考虑在AJAX请求中指定一个更具体的目标 - 你现在只是在$('form')
定位,这可能是页面上的任何形式..
答案 1 :(得分:0)
已经发现了我想要分享的答案--Jquery serialize()函数将数据编码为一个字符串,然后将其作为一个带有“form”键的数组发布到PHP。
为了在php中处理这个问题,我必须首先使用PHP中的urldecode函数从名称属性转换字符串编码元素(%5B%5D)。这是因为这些中可能有多个值,因此它们在表单中声明为数组(“name =”edu_insts []“)。然后使用parse_str将字符串拆分为数组。
<?php
$querystring = $_POST['form'];
$querystring = urldecode($querystring);
parse_str($querystring, $params);
$insts = $params['edu_inst'];
echo $insts[0]."<br>";
echo $insts[1]."<br>";
?>
这将创建一个名为$ params的数组,其中的键对应于表单名称属性。
请注意,如果您在同一个名称中有多个值,那么每个值都将放在一个数组本身中,因此使用上面的文本您将获得$ insts [0] = University 1 和$ insts [1] =大学2等。
希望这可以帮助任何有同样问题的人。