我正在将带有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
- 语句中可能出现什么问题?
答案 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']);