序列化数据没有正确进入php数组

时间:2014-04-08 16:04:52

标签: php jquery

我使用此功能发布序列化数据:

$( "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进入:\

2 个答案:

答案 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);
             }
        });
});