カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Ajax レスポンス処理の注意点

この記事は最終更新日から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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です