次のような 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)、返信はオブジェクトです。
配列に 2 番目のインデックスを追加しましたが、結果は同じです。すべての文字列は ASCII ですが、UTF8_encode で渡そうとしました。jquery で何らかの動作をトリガーしていた場合に備えて、「doit」インデックスの名前を「action」から変更しました。
念のために言っておきますが、間違っている場合の返答は(例えば)です。
"{"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 のバグであれば、非常に奇妙なバグです。どうすれば証明できますか?