PHP无法读取AJAX发送的数组

时间:2013-01-01 22:06:37

标签: php javascript ajax arrays json

  

可能重复:
  send arrays of data from php to javascript

我正在将带有ajax的数组发送到php文件。 Array是应存储在数据库中的名称列表。为了对此进行双重检查,我尝试回显在php文件中创建的sql_query。但响应始终是

  

为foreach()...

提供的参数无效

所以我搜索了SO的一些解决方案,通常答案就像“你的'数组'不是数组”。所以我回应了提交给php的数组,它返回所有传递的名字在一行(我认为这意味着数组到达了php文件)。

所以这是我的JS ......

var tourneyData = {
    tName : tourneyName,
    tNum : number,
    tNames : names, // this is an array
    tInt : international,
    tLig : liga,
    tStars : stars
};

$.ajax({
    type: "POST",
    url: "php/storeTourney.php",
    data: tourneyData,
    datatype: "json",
    success: function(response){
        alert("response " + response);
    }
});

...和PHP代码

$tName = $_POST['tName'];
$tNum = $_POST['tNum'];
$tNames = $_POST['tNames'];
$tInt = $_POST['tInt'];
$tLig = $_POST['tLig'];

$insert = "";
foreach($tNames as $d){ // line pointed in the error message
    $insert += "INSERT INTO NAMES VALUES('test', '".$d."');";
}

echo $insert;

我并不完全理解代码中的错误。如果foreach()显然是一个数组,$tNames - 语句中可能出现什么问题?

4 个答案:

答案 0 :(得分:2)

您需要提示您要将数据作为数组获取。将tNames命名为tNames[]

var tourneyData = {
    tName : tourneyName,
    tNum : number,
    'tNames[]' : names, // this is an array
    tInt : international,
    tLig : liga,
    tStars : stars
};

此处的示例: http://api.jquery.com/jQuery.post/

如果要发送更复杂的对象或n维数组,则需要考虑使用JSON。您可以在JS端使用{object: JSON.stringify(object)},在PHP端使用json_parse($_POST['object'])

答案 1 :(得分:1)

除了请求格式错误之外,您还要提交一个PHP解释为字符串的javascript数组。解决方案从另一个SO线程复制。

  

Gareth Pass Javascript Array -> PHP

     

您可以使用JSON.stringify(array)在JavaScript中对数组进行编码,然后使用$ array = json_decode($ _ POST [' jsondata']);在你的PHP脚本中检索它。

答案 2 :(得分:0)

您在JavaScript中错过了POST变量名称:

(...)

$.ajax({
    type: "POST",
    url: "php/storeTourney.php",
    data: {"data":tourneyData},
    datatype: "json",
    success: function(response){
        alert("response " + response);
    }
});

现在在POST' ed数据上尝试var_dump:

var_dump($_POST['data']);

答案 3 :(得分:0)

由于您正在尝试对字符串进行操作,因此需要使用json_decode将其转换为对象来迭代它。

$tNames = json_decode($_POST['tNames']);

请参阅:http://php.net/manual/en/function.json-decode.php