无法实现它:jQuery AJAX数组到PHP

时间:2014-09-16 20:53:18

标签: php jquery arrays ajax json

整个下午我的问题都遇到了很多问题。不幸的是,对Google和SO的无休止搜索并没有帮助我。

问题

我需要每隔30秒使用jQuery AJAX将数组发送到PHP脚本。在构造数组并将其发送到PHP文件后,我似乎陷入困境。我无法正确解码数组,当我查看控制台时,它会给我 null

脚本

这是我到目前为止所拥有的。顺便说一句,我正在运行jQuery 1.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)

if (isset($_POST["players"])) {
    $data = json_decode($_POST["players"], true);

    header('Content-Type: application/json');
    echo json_encode($data);
}

我喜欢什么

解码JSON数组后,我希望将其循环,以便从属于某个id的数据库中的行中获取特定信息。在我的情况下,行1,2和3。 但我不知道解码后的阵列是否真的准备好进行循环。我对控制台的体验很小,我不知道如何检查它是否正常。

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


有人能告诉我究竟是错误/缺失了吗? 也许答案比我想象的要容易,但我似乎无法找到自己。

祝你好运, 彼得

2 个答案:

答案 0 :(得分:1)

我怀疑发布的数据不是正确的JSON格式。您需要使用JSON.stringify()在javascript中对数组进行编码。构建JSON的Here is an example

在JS中,您可以使用console.log('something');在浏览器控制台窗口中查看输出。要在php中查看发布的数据,您可以echo '<pre>'; print_r($someArrayOrObjectOrAnything); die();

print_r打印有关变量

的人类可读信息

因此,在您的情况下,使用echo '<pre>'; print_r($_POST);查看是否实际发布了某些内容。

答案 1 :(得分:1)

jQuery.ajax选项dataType仅适用于服务器答案。您从'fetchstatus.php'中选择了什么类型的anser。它是对的,它是json。但是你通过post方法发送给这个文件的不是json。 您没有json_decode $_POST个数据。尝试使用var_dump($_POST)输出POST数据。

如果'玩家'没有作为参数给出,会发生什么?然后没有JSON返回。像这样更改你的'fetchstatus.php':

$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);

使用JSON: 您可以简单地在jQuery中使用返回的JSON数据,例如像这样:

// replace ["1", "2", "3"] with the 'data' variable
jQuery.each(["1", "2", "3"], function( index, value ) {
    console.log( index + ": " + value );
});

如果您在PHP端填写$data变量,请将您的播放器ID用作数组键,并使用其他数据作为值的数组,例如以下结构:

$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);