无法将php关联数组转换为字符串

时间:2014-01-11 17:56:52

标签: javascript php arrays json

我想将php数组转换为json字符串,并通过异步Web请求传递该字符串。当webrequest发出时......我传递的那个字符串的值为“[Object object]”,这是我不想要的。

略有简化:

$positionCounterArray = array("QB"=>1, "RB"=>1);
$positionCounterArrayString = json_encode($positionCounterArray);

稍后在javascript ...

<script>

var numberOfPlayers = <?php echo $positionCounterArrayString; ?>;
alert(numberOfPlayers);
var query = "./queries/queryForAvailablePlayers.php?playerId="+playerId+"&userId="+id+"&numberOfPlayers="+numberOfPlayers;

</script>

对应上面的代码部分,当我右键单击并查看源代码时,我看到:

var numberOfPlayers = {"QB":0,"RB":0};
alert(numberOfPlayers);

我想这是有道理的...警告(numberOfPlayers)在运行时没有约束,所以我们不会看到值:{“QB”:0,“RB”:0}但是

但是当我真正运行它时,我的弹出警报是[Object object]而不是我希望的字符串json字符串:{“QB”:0,“RB”:0}

整个问题是,当我发送查询时,它会发送./queries/queryForAvailablePlayers.php?playerId=179&userId=2&numberOfPlayers=[Object object]。这个查询是这样捕获的,我不能使用json_decode($ _ GET ['numberOfPlayers'],true)将它返回到关联数组中以提取值并最终用于查询我的数据库。

对此事的任何帮助表示赞赏!感谢

2 个答案:

答案 0 :(得分:3)

如果你想让它成为字符串而不是js对象,你需要在js中添加引号:

而不是:

var numberOfPlayers = <?php echo $positionCounterArrayString; ?>;

这样做:

var numberOfPlayers = '<?php echo $positionCounterArrayString; ?>';  //See the quotes

编辑(额外)

此外,它总是被建议逃避您的网址参数,所以

var query = ... +id+"&numberOfPlayers="+numberOfPlayers;

最好是:

var query = ... +id+"&numberOfPlayers="+encodeURIComponent(numberOfPlayers);

干杯

答案 1 :(得分:0)

您输出到Javascript的是Javascript对象文字(本质上是JSON),因此Javascript变量将保存一个对象,而不是字符串。因此警报完全正确,变量保存一个对象。尝试console.log而不是alert,以便在浏览器的控制台中获得更完整的调试值。

我认为这比传输字符串更可取,因为您可以在Javascript中直接使用本机Javascript对象执行某些操作。您只需要注意正确格式化对象以便在URL中使用而不是仅仅连接它,就像您必须处理Javascript中的任何对象变量一样。