Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可以';t读取AJAX发送的数组_Php_Javascript_Ajax_Arrays_Json - Fatal编程技术网

PHP可以';t读取AJAX发送的数组

PHP可以';t读取AJAX发送的数组,php,javascript,ajax,arrays,json,Php,Javascript,Ajax,Arrays,Json,可能重复: 我将使用ajax向php文件发送一个数组。数组是应存储在数据库中的名称列表。为了再次检查这个问题,我尝试回显在php文件中创建的sql\u查询。但反应总是如此 为foreach()提供的参数无效 所以我搜索了一些解决方案,通常答案是“你的‘数组’不是数组”。所以我回显了提交给php的数组,它在一行上返回所有传递的名称(我认为这意味着数组到达php文件) 这是我的JS var tourneyData = { tName : tourneyName, tNum : nu

可能重复:

我将使用ajax向php文件发送一个数组。数组是应存储在数据库中的名称列表。为了再次检查这个问题,我尝试回显在php文件中创建的
sql\u查询
。但反应总是如此

为foreach()提供的参数无效

所以我搜索了一些解决方案,通常答案是“你的‘数组’不是数组”。所以我回显了提交给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;

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

JavaScript中缺少POST变量名称:

(...)

$.ajax({
    type: "POST",
    url: "php/storeTourney.php",
    data: {"data":tourneyData},
    datatype: "json",
    success: function(response){
        alert("response " + response);
    }
});
现在尝试对发布的数据进行var_转储:

var_dump($_POST['data']);

当您试图对字符串进行foreach时,您需要使用
json\u decode
将其转换为对象以对其进行迭代

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

请参阅:

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

加雷斯 您可以使用JSON.stringify(array)在JavaScript中对数组进行编码,然后使用$array=JSON_decode($_POST['jsondata']);在PHP脚本中检索它


您需要向php提示您希望以数组的形式获取数据。将tNames命名为
tNames[]

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


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

您确定它是一个数组吗?您是否有
var\u dump
it来验证这种情况?如果是数组,则不会得到错误。$tNames=(array)$\u POST['tNames'];我同意jMax,在PHP文件的顶部添加一些测试数据,并确保在使用Javascript发送之前逻辑正常。在这种情况下,PHP只看到格式化为Javascript数组的字符串。您必须找到一种方法将js数组转换为PHP数组。这可能是另一个问题的类似副本,但它不是建议的副本的完全副本。相反的问题是,从JS到PHP,而不是从PHP到JS。您所做的只是将他的各个post变量封装到一个对象中。这是唯一不会引发错误的解决方案。但是,现在返回insert语句将导致警报“response 0”。现在,当返回var_dump($tNames)时,它不再返回NULL,而是返回表示变量是数组的信息。但是我刚刚发现我在用错误的方式连接php文件中的字符串(+=)啊,是的!不要让你的PHP和JS混淆(与.vs+连接)。有时很难来回切换。我通常把$signs放在我的JS中。。。现在唯一的问题是,它在php中被识别为数组,但是这个数组只包含一个元素。假设我在JS中有一个数组,比如['one','two','three'],在php中我得到了数组['onetwothree'],因为它返回“insert into names values('test','onetwothree')。很抱歉发布了一个新问题…(这是回显var_dump()时的响应:响应数组(1){[0]=>string(11)“onetwothree”})我唯一的怀疑是您的javascript在执行post之前以某种方式将tNames设置为字符串。尝试将tNames硬编码到数组中,看看会发生什么。或者,如果您使用firebug或类似工具,您可以检查网络选项卡,确保请求作为数组正确发送(应该是
tNames[]=one&tNames[]=two&tNames[]=三个