我想将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)将它返回到关联数组中以提取值并最终用于查询我的数据库。
对此事的任何帮助表示赞赏!感谢
答案 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中的任何对象变量一样。