我使用此功能发布序列化数据:
$( "form" ).on( "submit", function( event ) {
event.preventDefault();
console.log($( this ).serialize());
var data = $( this ).serialize();
$.ajax({
type: "POST",
url: "content/rev/a_submit.php",
data: "data=" + data,
success: function(result){
$("#acct_content").html(result);
}
});
});
数据的console.log与表单中的内容匹配:
month1%5B%5D=4&sap=721&name=uname&month1%5B%5D=10000.00&month2%5B%5D=10000.00&month3%5B%5D=0.00&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=15000&month2%5B%5D=0.00&month3%5B%5D=0.00&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=50&month2%5B%5D=50&month3%5B%5D=50&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=15000&month2%5B%5D=10000&month3%5B%5D=0&month4%5B%5D=0&month5%5B%5D=0&month6%5B%5D=0&sap_data%5B%5D=&sap_data%5B%5D=&sap_data%5B%5D=&sap_data%5B%5D=
我在php文件中print_r的内容是什么:
Array ( [0] => 10000.00 [1] => 1 [2] => 50 [3] => 15000 )** Array ( [0] => 10000.00 [1] => 1 [2] => 50 [3] => 10000 ) Array ( [0] => 0.00 [1] => 1 [2] => 50 [3] => 0 ) Array ( [0] => [1] => [2] => [3] => 0 ) Array ( [0] => [1] => [2] => [3] => 0 ) Array ( [0] => [1] => [2] => [3] => 0 ) Array ( [0] => [1] => [2] => [3] => )
问题在于第一个数组(month1)。您可以在console.log中看到它显示的第二个索引:
month1%5B%5D=15000
但是在数组中它有[1] => 1
在特定索引中每个月都会发生这种情况。
我有点失落。在我的php代码中,索引0和1的处理方式完全相同,尽管只有一个正确地被放入数组...
编辑:这是html / php 让变量通过:
$month1= mysql_query("SELECT conf_budget,incremental,round((confidence*100),0),(updated_at) FROM rev_acct WHERE sap_id = '$sap' AND MONTH = '$mb' ORDER BY updated_at DESC LIMIT 1;");
$row1 = mysql_fetch_row($month1);
$bud1 = $row1[0];
$inc1 = $row1[1];
$con1 = $row1[2];
表格中的输入:
<td>$<input class="input-small" name="month1[]" id="conf1_<?php echo $sap; ?>" onkeypress="return isNumberKey(event)" type="text" value="<?php echo $bud1; ?>"></td>
<td>$<input class="input-small" name="month1[]" type="text" id="inc1_<?php echo $sap; ?>" onkeypress="return isNumberKey(event)" value="<?php echo $inc1; ?>" ></td>
EDIT2:添加汇总代码
$month1 = array();
$month1 = $_POST['month1'];
print_r($month1);
我只是因为某种原因将var转储到数组而索引一个是bool。该值最初来自mysql表,其中存储为十进制。 (与索引0相同)但是当我发布它时,它作为一个bool进入:\
答案 0 :(得分:1)
序列化或反序列化数据没有问题,问题是你发送时的ajax调用:
data: "data=" + data
结果是data = month1 = 4。这就是为什么你没有得到数组中的4,因为你将“数据”字符串连接到data
变量。但我仍然不知道你为什么得到[1] =&gt; 1以及为什么其他值的顺序不正确。
这应该有效:
$( "input[type='submit']" ).click(function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: "content/rev/a_submit.php",
data: $("form").serialize(),
success: function(result){
$("#acct_content").html(result);
}
});
});
这应该正常工作,我在解码并解析数据字符串后得到了正确的值。请注意,您不能正确解析data
var。像我一样尝试使用parse_str
。此外,如果您在print_r
的{{1}}行之前显示您所做的事情,那就太棒了。
a_submit.php
$res = "month1%5B%5D=4&sap=721&name=uname&month1%5B%5D=10000.00&month2%5B%5D=10000.00&month3%5B%5D=0.00&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=15000&month2%5B%5D=0.00&month3%5B%5D=0.00&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=50&month2%5B%5D=50&month3%5B%5D=50&month4%5B%5D=&month5%5B%5D=&month6%5B%5D=&month1%5B%5D=15000&month2%5B%5D=10000&month3%5B%5D=0&month4%5B%5D=0&month5%5B%5D=0&month6%5B%5D=0&sap_data%5B%5D=&sap_data%5B%5D=&sap_data%5B%5D=&sap_data%5B%5D=";
print_r(urldecode($res));
$output= array();
parse_str($res, $output);
print_r($output);
答案 1 :(得分:0)
使用此
data: $("form").serialize()
我使用onclick按钮事件而不是我不需要阻止表单提交。 像这样:
$( "input[type='submit']" ).click(function(){
$.ajax({
type: "POST",
url: "content/rev/a_submit.php",
data: $("form").serialize(),
dataType: "json",
success: function(result){
$("#acct_content").html(result);
}
});
});