PHP と MySQL を使用して製品をループし、Javascript 関数を呼び出す onClick イベントを含む img タグで構成される HTML コードを生成しています。onClick イベントを介して PHP 変数を Javascript 関数に渡したいと考えています。私は jQuery を使用していますが、PHP の json_encode() 関数と jQuery の jquery-json プラグインを使用することをお勧めします。
私のPHPコードは次のようになります。
$onclick = json_encode(array(
'productid' => $productsRow['ProductID'],
'description' => $productsRow['Description']
));
echo "<a href=\"javascript:;\" onClick=\"changepic('" . htmlentities($onclick) . "')\">";
echo "<img src=\"products/$thumbnailfilename\" width=\"100\" height=\"100\">";
echo "</a>";
ご覧のとおり、私の Javascript 関数は changepic() と呼ばれます。この質問に関係のないコードを少し省略しました (つまり、データベース アクセス コードとサムネイル画像の場所の決定)。
私のJavascriptコードは次のとおりです。
function changepic(productarray) {
var productid = $.evalJSON(productarray).productid;
var productdesc = $.evalJSON(productarray).description;
alert(productid);
}
Javascript 配列に渡す PHP 変数については、まだ実際には何もしていません。最初にそれを機能させようとしているだけです。私の最終的な目標は、jQuery を使用して製品の説明を<div>
サンプルの製品詳細は次のようになります。
ProductID: 30c7508008ac7597619ad9b90a97b40f
Description: <p>Wide and Narrow Bands<br>
Set with Top-Quality Diamonds</p><p>
ご覧のとおり、説明には HTML コードと、<br>
タグの後の改行が含まれています。
生成される HTML は次のようになります。
<a href="javascript:;" onClick="changepic('{"productid":"30c7508008ac7597619ad9b90a97b40f","description":"<p>Wide and Narrow Bands<br>\r\nSet with Top-Quality Diamonds<\/p>"}')"><img src="products/tn-30c7508008ac7597619ad9b90a97b40f.jpg" width="100" height="100"></a>
これを実行すると、Javascript エラーが発生します。
Event thread: click
Uncaught exception: SyntaxError: JSON.parse: Unescaped control char in string: "<p>Wid
Error thrown at line 18, column 2 in changepic(productarray) in http://isis/carats/view-collection.php?collectionid=32d0c7b8774f7f82a2d7c7d053286cfc:
var productid = $.evalJSON(productarray).productid;
called from line 1, column 0 in <anonymous function>(event) in http://isis/carats/view-collection.php?collectionid=32d0c7b8774f7f82a2d7c7d053286cfc:
changepic('{"productid":"30c7508008ac7597619ad9b90a97b40f","description":"<p>Wide and Narrow Bands<br>\r\nSet with Top-Quality Diamonds<\/p>"}')
私が見たところ、JSON 文字列のエンコードに何か問題がありました。私はいくつかのグーグルを実行し、エンコーディングは必要ないと言う人を見つけました (私はそれを試してみましたが、製品の説明は HTML として取得され、ページに表示されました)。
evalJSON() で使用する前に、Javascript 関数でデコードする必要がありますか?