【问题标题】:pass php array to javascript array将php数组传递给javascript数组
【发布时间】:2014-06-11 21:45:51
【问题描述】:

我正在寻找将 php 数组传递给 javascript 的最佳方式。

我正在制作 RPG,当他们登录时,我想从数据库中返回他们保存的数据并存储在 javascript 端的数组中:

要获取数据,我会这样做:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        game.data.dataArray.push(returned_data.split(" "));
        log("1: " + game.data.dataArray); //output: `1: 120,mymap2` 
        log("2: " + game.data.dataArray[0]); //output: `2: 120,mymap2`
    }
);

PHP:

    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"
        LIMIT 1';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        $message =  $row['experience'] . $row['levelname'];
    }   

 echo json_encode($message);

1) 这是将一组值放入 js 数组的最佳方式吗?

2) 为什么我不能使用game.data.dataArray[0] 访问game.data.dataArray 的某个数据元素。

这些输出与1: 120,mymap2 相同

        log("1: " + game.data.dataArray);
        log("2: " + game.data.dataArray[0]);

应该returned_data.split(" ")将返回的字符串拆分成两个数组元素吗?


编辑:好的,我已经完成了 echo json_encode($message); 并返回引号,但对于 game.data.dataArraygame.data.dataArray[0] 仍然返回相同的结果

1: "120,mymap2" 
2: "120,mymap2" 

我也把函数改成了$.getJSON


又改成了

    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        $array[] =  $row['experience'] . $row['levelname'];
        die(json_encode($array[]));
    }   

而JS是:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        game.data.dataArray.push(returned_data.split(" "));
        log("1: " + game.data.dataArray);
        log("2: " + game.data.dataArray[0]);
    }
);

输出:

Uncaught melonJS: level <br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-...<omitted>...nd 

【问题讨论】:

  • 你应该使用json_encode函数。
  • @hidden_​​4003 请查看更新
  • 你发布的php没有输出任何东西,你到底在呼应什么?
  • @jeroen 请看上面

标签: javascript php arrays


【解决方案1】:

如果你使用$.getJSON并且你提供了有效的json,你不需要解析任何东西,所以你可以把你的php改成:

if ($row = $result->fetch_assoc()) {
    echo json_encode($row);
    exit;    // You're limiting the number of rows to 1, so there is no need to continue
}

还有 javascript:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        // you can push `returned_data` to an array / add it to an object,
        // but then you need to keep track of its index
        log("1: " + returned_data.experience); //output: `1: 120` 
        log("2: " + returned_data.levelname); //output: `2: mymap2`
    }
);

【讨论】:

  • 不知道你可以做returned_data.experience,并访问返回数据的属性。那是因为你将它作为 JSON 返回,一个 js 可读对象?
  • @Growler 更好;即使您使用“普通”$.ajax() 方法,jQuery 也会做出智能猜测并解析您的 json。虽然如果你想正确地做到这一点,你可以使用dataType: 'json'$.getJSON。您只需要确保除了 json 之外没有其他输出被发回(如警告等)。
【解决方案2】:

你需要做的是,改变这段代码:

while ($row = $result->fetch_assoc()) {
    $message =  $row['experience'] . $row['levelname'];
}

把它做成一个数组:

while ($row = $result->fetch_assoc()) {
    $message[] =  $row['experience'] . $row['levelname'];
}

所以,$message 现在变成了一个数组。您需要将其输出给客户端。你可以这样做:

die(json_encode($message));

原因是,在你的代码中,它只会输出最后一个。

【讨论】:

  • PHP页面的响应是什么?
猜你喜欢
  • 1970-01-01
  • 2011-05-16
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多