在ajax中使用php-array并将其发布回php

时间:2014-03-15 21:50:26

标签: php ajax arrays

我在那里, 我尝试使用带有ajax的php数组将其发布到另一个php文件。 我以为我可以这样做:

<?php
$test_array[] = "dum";
$test_array[] = "dim";
$test_array[] = "dam";
$test_array[] = "dom";
$test_array[] = "düm";
?>
<script type="text/javascript">

    $.ajax({ url: 'include.php',
             type: 'POST',
             data: { my_array : <?php echo json_encode($test_array); ?> 
                   },
        success: function(returnData)
             alert(returnData);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
             alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }

        }); 
}
</script>

使用include.php看起来像这样:

echo count($_POST['my_array']);
echo json_decode($_POST['my_array']);
echo $_POST['my_array'];

问题是,没有数组会进入incude.php 回声给出“1düm”,意思是$_POST-var的长度为1(而原始数组为5),其条目仅为“düm”(这是原始的最后一个条目)数组)。 它看起来像这样:

count:  1
json_decode:
$_POST:  düm

所以,它接缝不是完整的数组,而只是最后一个条目是POST ...

如何通过ajax-call将整个数组$test_array传递给include.php

事先提前......

3 个答案:

答案 0 :(得分:1)

试试这个,制作一个javascript Array并将其传递给ajax函数

var myArr=["<?php print implode('","', $test_array)?>"];
$.ajax({ url: 'include.php',
             type: 'POST',
             data: { my_array : myArr 
                   },
        success: function(returnData)
             alert(returnData);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
             alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }

        }); 

并且不再需要json_decode中的include.php

答案 1 :(得分:1)

<?php
$test_array[] = "dum";
$test_array[] = "dim";
$test_array[] = "dam";
$test_array[] = "dom";
$test_array[] = "düm";
?>
<script type="text/javascript">
var stuff = <?php echo json_encode($test_array);?>;
        var jsonString = JSON.stringify(stuff);
    $.ajax({ url: 'include.php',
             type: 'POST',
             data: {data : jsonString},
        success: function(returnData)
             alert(returnData);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
             alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }

        }); 
}
</script>

答案 2 :(得分:0)

在ajax中,更改行:

my_array : <?php echo json_encode($test_array); ?> 

my_array : JSON.stringify(<?php echo json_encode($test_array); ?>)

所以它看起来像这样:

<?php
$test_array[] = "dum";
$test_array[] = "dim";
$test_array[] = "dam";
$test_array[] = "dom";
$test_array[] = "düm";
?>
<script type="text/javascript">

    $.ajax({ url: 'include.php',
             type: 'POST',
             data: { my_array : JSON.stringify(<?php echo json_encode($test_array); ?>) 
                   },
        success: function(returnData)
             alert(returnData);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
             alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }

        }); 
}
</script>

include.php中使用

$my_array = json_decode($_POST['my_array'])

让阵列回来。

但是,这不适用于多维数组,例如,如果数组看起来像这样:

$test_barry[1][1] = "1a";
$test_barry[1][2] = "1b";
$test_barry[1][3] = "1c";
$test_barry[2][1] = "2a";
$test_barry[2][2] = "2b";
$test_barry[2][3] = "2c";
$test_barry[3][1] = "3a";
$test_barry[3][2] = "3b";
$test_barry[3][3] = "3c";

您需要使用

取回input.php中的多维数组
$my_array = json_decode($_POST['my_array'],TRUE) // add TRUE