- Ajax
- 2012-12-11 - 更新:2018-07-09
この記事は最終更新日から1年以上経過しています。
Ajaxを使用して通信し、得た結果を処理するときの注意点。
サーバーサイドでオブジェクト等を生成して返し、それをeval処理する際、
無効な改行が含まれるとエラーが発生することがあります。
具体的には「終了していない文字列型の定数です。」とスクリプトエラーが発生してしまいます。
例えば、PHPで単純に以下のようなデータを出力するとします。
echo "var a = \"文字列\";";
それをJavaScriptでeval処理すると
eval(responseText); alert(a);
「文字列」というアラートが表示される。
しかし、PHPで出力したデータに改行が含まれていた場合
echo "var a = \"文字列\nです\";";
これではJavaScriptでeval処理した時点でエラーが発生します。
なぜならeval処理した内容が以下のようになるからです。
var a = "文字列 です";
どうでしょうか?
これだと、構文としてエラーですよね?
対処法としては、PHP側で処理してあげます。
例としては、改行コードを削除、改行を<br>に置き換えなどです。
$a = "文字列\nです"; // str_replaceを使う $a = str_replace("\r\n", "", $a); $a = str_replace("\r", "", $a); $a = str_replace("\n", "", $a); // strtrを使う $a = strtr($a, array("\r\n" => "<br>", "\r" => "<br>", "\n" => "<br>")); // データを出力 echo "var a = \"".$a."\";";
とすると、JavaScript側では
// 改行を削除した場合 var a = "文字列です"; // 改行を<br>に置き換えた場合 var a = "文字列<br>です";
となります。
また、別の対処法としては文字列を「’」シングルクォーテーションで囲む方法もあります。
どちらかというとこちらのほうが正規の方法のようです。
これはシングルクォーテーションの場合だと改行コードが解釈されないためです。
これでエラーが発生しなくなります。
7,141 views