我有一些类似于此的 PHP 5 代码:
$result = myFunction(...); // return false, or doit action
$reply = array();
if ($result) {
$reply['doit'] = $result;
$reply['status'] = "a status html string";
} else {
$reply['content'] = "Some html text";
$reply['menu'] = "Some other html text";
$reply['status'] = "a different status html string";
}
return $reply;
调用者包括片段
$reply = somefunction();
echo json_encode($reply);
然后这个回复被发送到客户端,在那里 jquery 将它传递给我的函数
function handleReply(reply) {
if (reply.doit) {
handle action
}
if (reply.content) document.getElementById('content').innerHTML=reply.content;
if (reply.menu) document.getElementById('menu').innerHTML=reply.menu;
if (reply.status) document.getElementById('status').innerHTML=reply.status;
}
我一直在努力解决的是,当执行 if 语句的 doit 分支时,($result 是一个字符串)jquery 给我的回复是一个字符串。当采取内容/菜单/状态方面($result 为 false)时,回复是一个对象。
我在数组中添加了第二个索引,结果是一样的。虽然所有字符串都是 ASCII 我尝试通过 UTF8_encode 传递它们。我已将“doit”索引的名称从“action”更改为以防触发 jquery 中的某些行为。
为了清楚起见,错误时的回复是(例如)。
"{"doit":"obj=session&act=show&ID=3","status":"<p>Nic: Ian<br\/>Reseller: Coachmaster.co.uk<br\/>Status: SysAdmin <\/p>"}"
这是一个字符串。我期望:
{"doit":"obj=session&act=show&ID=3","status":"<p>Nic: Ian<br\/>Reseller: Coachmaster.co.uk<br\/>Status: SysAdmin <\/p>"}
这是一个对象/数组。这也是我的日志记录显示的内容。
我在windows 7和Apache下使用php5.4.3,在linux和nginx下使用php 5.3.10,结果相同。jquery 都是 v1.7.2 版本。还加载了 jQuery UI - v1.10.3 - 2013-07-02。
如果它是 jquery 中的一个错误,那就是一个非常奇怪的错误。我该如何证明呢?