Can';无法让它工作:jqueryajax数组到PHP

Can';无法让它工作:jqueryajax数组到PHP,php,jquery,arrays,ajax,json,Php,Jquery,Arrays,Ajax,Json,整个下午,我的问题一直困扰着我。在谷歌上没完没了的搜索,不幸的是没有帮到我 问题 我需要每30秒使用jQueryAjax向PHP脚本发送一个数组。在构造数组并将其发送到PHP文件后,我似乎陷入了困境。我似乎无法正确解码数组,当我查看控制台时,它给我空值 剧本 这就是我目前所拥有的。顺便说一下,我正在运行jQuery1.11.1和PHP版本5.3.28 jQuery/Ajax部分 $(document).ready(function(){ $.ajaxSetup({cache: false

整个下午,我的问题一直困扰着我。在谷歌上没完没了的搜索,不幸的是没有帮到我

问题 我需要每30秒使用jQueryAjax向PHP脚本发送一个数组。在构造数组并将其发送到PHP文件后,我似乎陷入了困境。我似乎无法正确解码数组,当我查看控制台时,它给我空值

剧本 这就是我目前所拥有的。顺便说一下,我正在运行jQuery1.11.1和PHP版本5.3.28

jQuery/Ajax部分

$(document).ready(function(){
    $.ajaxSetup({cache: false});

    var interval = 30000;
    // var ids = ['1','2','3'];

    var ids = []; // This creates an array like this: ['1','2','3']
    $(".player").each(function() {
        ids.push(this.id);
    });

    setInterval(function() {
        $.ajax({
            type: "POST",
            url: "includes/fetchstatus.php",
            data: {"players" : ids},
            dataType: "json",
            success: function(data) {
                console.log(data);
            }
        });
    }, interval);

});
PHP部分(fetchstatus.PHP)

我想要什么 解码JSON数组后,我希望foreach循环它,以便从数据库中属于某个id的行中获取特定信息。在我的示例中,是第1、2和3行。 但我不知道解码后的数组是否已经准备好循环。我使用控制台的经验很少,我不知道如何检查它是否正常

然后,所有属于具有这些id的行的信息被捆绑到一个新数组中,进行json编码,然后在成功回调中发送回。然后使用此数组中发送的信息更改DOM中的元素


有人能告诉我我到底做错了什么/错过了什么吗? 也许答案比我想象的要简单,但我似乎无法了解自己

致以最良好的祝愿,
Peter我怀疑发布的数据不是正确的JSON格式。您需要使用
JSON.stringify()
在javascript中对数组进行编码。构建JSON的方法

在JS中,您可以使用
console.log('something')
以在浏览器控制台窗口中查看输出。要在php中查看发布的数据,可以执行
echo';打印(someArrayOrObjectOrAnything);模具()

$returningData = array(); // or 'false'

$data = @$_POST['players']; // @ supresses PHP notices if key 'players' is not defined

if (!empty($data) && is_array($data))
{
    var_dump($data); // dump the whole 'players' array

    foreach($data as $key => $value)
    {
        var_dump($value); // dump only one player id per iteration
        // do something with your database
    }

    $returningData = $data;
}

header('Content-Type: application/json');
echo json_encode($returningData);
print\r
打印有关变量的可读信息


因此,在您的情况下,使用
echo';打印(邮政美元)
查看是否确实发布了内容。

jQuery.ajax
选项
dataType
仅用于服务器的答案。您正在从“fetchstatus.php”中导出什么类型的anser。没错,是json。但是通过
post
方法发送到此文件的不是json。
// replace ["1", "2", "3"] with the 'data' variable
jQuery.each(["1", "2", "3"], function( index, value ) {
    console.log( index + ": " + value );
});
您不必对
json\u数据进行解码。尝试使用
var\u dump($\u POST)
输出POST数据

如果“玩家”不作为参数给出,会发生什么?然后没有
JSON
返回。更改“fetchstatus.php”,如下所示:

$data = array(
    1 => array(
        // data from DB for player with ID 1
    ),
    2 => array(
        // data from DB for player with ID 2
    ),
    ...
);

// [...]
echo json_decode($data);
使用JSON: 您只需在jQuery中使用返回的JSON数据,例如:

$data = array(
    1 => array(
        // data from DB for player with ID 1
    ),
    2 => array(
        // data from DB for player with ID 2
    ),
    ...
);

// [...]
echo json_decode($data);
如果您在PHP端填充
$data
变量,请使用您的播放器id作为数组键,并使用包含其他数据的数组作为值,例如以下结构:


嗯,这与AJAX、jQuery和JSON有什么关系?你现在有一个数字数组,你现在真的需要与数据库交互,对吗?@lxg问题是我以前几乎没有使用过控制台,我不知道数据解码后会是什么样子。所以我不知道我是否真的准备好与数据库交互。对解码后的数组重新编码会给我空值。解码后
var\u dump($data)
会得到什么?当我在
$data=json\u解码之后添加
var\u dump($data)
时($\u POST[“players”],true)直接访问文件时,我看不到任何事情发生。但这是合乎逻辑的,对吗?当我直接访问时,我没有“发布”任何东西。当然不是。我希望您设置一个测试用例,在这个测试用例中,您可以检查脚本是否获得了它所期望的数据?比如:data:JSON.stringify({“players”:ids}),。我以前见过这一点,但我也见过没有stringify的成功实现。请不要更改任何内容,并告诉我当您打印($\u POST)
时会得到什么?复制和粘贴。我添加了
echo';打印(邮政美元)
到isset()语句外部的fetchstatus.php文件。当我直接访问此文件时,我看到的是:
Array()
如果直接访问文件,则没有任何POST参数。。。在浏览器web inspector中查看一下您的
print\r
为您提供了什么AJAX调用。当我使用前面提到的@algothym测试方法时,使用
echo''时,我得到了以下结果;打印(邮政美元)在isset()语句之外:nullArray([players]=>Array([0]=>1[1]=>2[2]=>3))当我使用前面提到的测试方法时,我得到以下变量转储:Array(3){[0]=>string(1)“1”[1]=>string(1)“2”[2]=>string(1)“3”}[“1”、“2”、“3”]。当我删除
var_dump()
语句时,我每30秒就会在控制台中看到以下内容:[“1”、“2”、“3”]。尽管这看起来很有效,但我在使用JSON时没有犯错误吗?没有JSON是一个很好的选择,而且使用起来很简单。您几乎可以将每个对象转换为JSON,并在以后使用JavaScript或更好的jQuery直接访问它。你是什么意思?因为我确信我发送了JSON,而它根本不是JSON哈哈。因此,我尝试
json\u decode()
发送到fetchstatus.php的数据。这让我怀疑我现在做得对,尽管你的答案似乎是解决我问题的办法。也许用JSON做任何事情都更明智?啊,我注意到你刚刚编辑了一篇文章,提出了一个全JSON的解决方案。我现在来看看。我取决于你的上下文,如果你只是传递数据,那么JSON就很好了,因为当数据被发送到客户端时,它是可以访问的。但有时您需要生成HTML来直接显示它,例如通过
jQuery($selector).load(url)
或您的数据已经存在于XML中,然后您可以考虑另一种
数据类型。在你的情况下,我更喜欢JSO