我想将2个php对象作为数据传递给$ .post。
$(function() {
$("button").click(function() {
$.post("fight.php",{player: "<?php $player;?>", enemy: "<?php $enemy; ?>"},function(result) {
$("#displayFight").html(result);
});
});
});
$player
,$enemy
是两个不同的对象,每个对象都有一些属性。我想将它们作为整个对象传递给它们,以便fight.php
可以处理它们。
我也试过serialize
,但无济于事:
{player: $("<?php $player ?>").serialize()}
我该怎么做?
注意:使用我尝试的所有方法,我得到一些'未知标识符'或$ _POST在接收页面上显示为空。
编辑:json_encode部分有效,但解码失败。在接收页面上:
$player = json_decode($_POST["player"])
失败并返回错误:json_decode() expects parameter 1 to be string, array given
答案 0 :(得分:2)
您需要使用json_encode
,如下所示:
$.post("fight.php",{
player: <?php echo json_encode($player);?>,
enemy: <?php echo json_encode($enemy);?>
}, ... );
请注意,<?php ?>
标记周围没有引号;如果需要,json_encode
会自动添加。
除此之外,您需要了解json_encode
强加的要求:最重要的是,如果您的对象包含字符串内容(作为属性或任何子对象的属性),那么这些字符串必须以UTF-8编码。
答案 1 :(得分:1)
要在PHP和Javascript之间轻松进行通信,您应该正确地序列化您的对象。最简单的方法是在PHP代码中调用json_encode($ player)。然后,当您使用PHP再次获取它时,您需要在其上调用json_decode()并正确初始化该对象。 PHP和Javascript无法共享对象的实例。只有序列化数据。
答案 2 :(得分:1)
尝试使用json_encode
http://www.php.net/manual/en/function.json-encode.php
{player: <?php json_encode($player); ?>}
答案 3 :(得分:1)
一个建议可能是使用json_encode
JSON编码PHP对象。
但是,让我们考虑一下:你有一个生成输出的PHP脚本。该输出 - 包含此Javascript片段和2个对象 - 被发送到执行它的客户端(浏览器),并通过AJAX调用将这两个对象重新发送回服务器。
所以另一个想法可能是简单地将服务器端的对象一直存储在会话中,只发送一个标识符而不是整个对象:
<?php
// apologies for errors - my PHP's rusty
$_SESSION[$player->uuid()] = $player;
$_SESSION[$enemy->uuid()] = $enemy;
?>
$.post("fight.php",{player: "<?php $player->uuid();?>", enemy: "<?php $enemy->uuid(); ?>"},function(result) {
// ...
});
然后fight.php
脚本将恢复:
// is this still how PHP handles sessions?
$player = $_SESSION[$_POST['player']];
$enemy = $_SESSION[$_POST['enemy']];
如果您使用传统框架来构建数据库驱动的应用程序,这种方法效果特别好,因为您的对象很可能存储在数据库中,并且可以轻松地从数据库中读取 - 这可能是比使用更好的解决方案$_SESSION
数组:
// if recollection serves this is CakePHP-ish
$player = $this->Player->find($_POST['player']);
$enemy = $this->Enemy->find($_POST['enemy']);