POST后PHP中的Object值与通过Ajax发送的值不匹配?

时间:2014-02-28 00:18:40

标签: javascript php ajax

在我的JavaScript中我创建了一个对象,如果我得到console.log(data[71])

as_of_date
    "2014-01-31"
class_index
    "Class C"
fund_no
    13
with_load
    1
y2004
    0
y2005
    0

y2006
    0
y2007
    0
y2008
    0
y2009
    0
y2010
    "9.46%"
y2011
    "-0.20%"
y2012
    "9.91%"
y2013
    "30.48%"

在我的php中,我有一个遍历每个对象的foreach:

    if($_POST['function'] == 'update_calendar_year') {
        $entries = $_POST['data'];
        foreach ($entries as $entry) {
            $fund_no = $entry['fund_no'];
            $y2004 = preg_replace('/[&%$]+/', '', $entry['y2004']);
            $y2005 = preg_replace('/[&%$]+/', '', $entry['y2005']);
            $y2006 = preg_replace('/[&%$]+/', '', $entry['y2006']);
            $y2007 = preg_replace('/[&%$]+/', '', $entry['y2007']);
            $y2008 = preg_replace('/[&%$]+/', '', $entry['y2008']);
            $y2009 = preg_replace('/[&%$]+/', '', $entry['y2009']);
            $y2010 = preg_replace('/[&%$]+/', '', $entry['y2010']);
            $y2011 = preg_replace('/[&%$]+/', '', $entry['y2011']);
            $y2012 = preg_replace('/[&%$]+/', '', $entry['y2012']);
            $y2013 = preg_replace('/[&%$]+/', '', $entry['y2013']);
            $with_load = preg_replace('/[&%$]+/', '', $entry['with_load']);

当我到达最后一个条目时,会发生以下错误:

<b>Notice</b>:  Undefined index: y2006 in <b>/home/diamondh/public_html/wp-content/themes/diamond-hill/functions.php</b> on line <b>69</b><br />
<br />
<b>Notice</b>:  Undefined index: y2007 in <b>/home/diamondh/public_html/wp-content/themes/diamond-hill/functions.php</b> on line <b>70</b><br />
<br />

如果在我的PHP中i var转储条目[71]我得到以下值:

array(5) {
  ["fund_no"]=>
  string(2) "13"
  ["class_index"]=>
  string(7) "Class C"
  ["with_load"]=>
  string(1) "1"
  ["y2004"]=>
  string(1) "0"
  ["y2005"]=>
  string(1) "0"
}

所有其他传递的值都是正确的,它似乎只是因某种原因而被切断一半值的最后一个对象?上面的var_dump应该显示与我的console.log相同的值,但不是。

沮丧地我试图只将数据[71]传递给我的php并且值是正确的:

    $.ajax({
      type: "POST",
      url: "functions.php",
      data: {
        function: "update_calendar_year",
        data: data[71]          
      },
      success: "success",
      dataType: "json"
    });

如果我然后检查传入PHP的内容我得到:

array(14) {
  ["fund_no"]=>
  string(2) "13"
  ["class_index"]=>
  string(7) "Class C"
  ["with_load"]=>
  string(1) "1"
  ["y2004"]=>
  string(1) "0"
  ["y2005"]=>
  string(1) "0"
  ["y2006"]=>
  string(1) "0"
  ["y2007"]=>
  string(1) "0"
  ["y2008"]=>
  string(1) "0"
  ["y2009"]=>
  string(1) "0"
  ["y2010"]=>
  string(5) "9.46%"
  ["y2011"]=>
  string(6) "-0.20%"
  ["y2012"]=>
  string(5) "9.91%"
  ["y2013"]=>
  string(6) "30.48%"
  ["as_of_date"]=>
  string(10) "2014-01-31"
}

这正是我所期望的。

对不起,这是一个很长的啰嗦,但这是一个非常奇怪的问题,我已经尝试了所有我能想到的东西,并且已经仔细检查过我能做到的事情。

1 个答案:

答案 0 :(得分:2)

PHP的帖子字段数限制为1000。

您有71 * 14个字段= 994

然后下一组14个字段被中途切断。

有关详细信息,请查看this SO post

要么增加最大帖子字段,要么重构代码和UI,以便一次处理更少的字段。