ここから本文です

Wordpressの本文をJavaScriptでdocument.writeするとエラーが発生します この度...

qas********さん

2011/3/2211:23:45

Wordpressの本文をJavaScriptでdocument.writeするとエラーが発生します

この度、ブログ修正を依頼されました。
既にWordPressを導入し運用しており為、HTMLはユーザが修正する為、
現在の構造は変更できない状態です。

HTMLの社員一覧から社員名をクリックし、本人のブログページに遷移します。
社員一覧ページには社員名、ブログタイトルが表示されており、これに追加で、
ブログ本文を表示させたいです。

プログラムは、社員一覧のHTMLを読み込む際、”blog.php”を呼び出し、
PHPでMySQLの情報を取得します。
また、社員一覧にはHTMLと、JavaScriptのfunction名が記述されており、
ブログタイトル、更新日付の内容は、各functionを呼び出すことで取得します。

本文を表示するソースも、同様の形で追加を行いましたが、
最終的な”function blog_content(id)”を実行した時点でエラーとなり、
ブラウザ上、何も表示されない状態となってしまいます。

ブラウザで”blog.php”を直接実行するとArrayの中身が表示されますが、
正常に表示されていますので、SQL→Arrayまでは正常に引き渡されてる様です。

また、MySQLでの格納型が「longTEXT」である為、JavaScriptでString型にキャストし、
substrで1文字にしましたが、echoまで正常で、function実行時点でエラーとなります。



【社員一覧:HTMLソース】 ※が追加部分
<script language="JavaScript" src="blog.php"></script>

-省略-
<tr>
<td><a href='http://133.192.168.20/blog/123456/'>山田太郎</a><br></td>
<td><script language="JavaScript">blog_title('123456')</script></td>
※<td><script language="JavaScript">blog_content('123456');</script></td>
</tr>



【PHP&JavaScriptソース】
ファイル名 blog.php

-----省略-----

//PHP(mySQLからデータを取得)
while ($row = mysql_fetch_assoc($result)){
$name[$username[$key]]['post_title'] = $row['post_title'];
$name[$username[$key]]['guid'] = $row['guid'];
※ $name[$username[$key]]['post_content'] = $row['post_content'];
}


-----省略-----

//JavaScript
var title = new Array();
var content = new Array();

<?
//抽出結果の出力
foreach ($name as $key => $value){
echo "title['".$key."'] = '".$value['post_title']."';\n";
※ echo "content['".$key."'] = '".$value['content']."';\n";
}


?>
//ブログタイトルの出力
function blog_title(id){
if(title[id] !== undefined){
document.write(title[id]);
}
}

※//本文の出力
※function blog_content(id){
※ if(date[id] !== undefined){
※ document.write(content[id]);
※ }
※}

補足>taman_777さん
回答ありがとうございます。
こちらでも修正してみましたが、おそらく、'content'が格納されている、
LongText型をdocument.writeする事がエラーの原因かと思います。
直接文字を指定した場合や、Text型の'post_title'等を指定した場合は
正常に表示されているんです・・・
因みに、Print文でブラウザ表示する事はできています。

閲覧数:
688
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

tam********さん

2011/3/2311:20:50

省略されているところに大事なものがあるような気がしますが、とりあえず動くものを作ってみました。
※MySQLにつなげていないのでテキトーなデータを代入しています。ご了承ください。
----- ソースここから -----
<?php
//PHP(mySQLからデータを取得)
//while ($row = mysql_fetch_assoc($result)){
$name['a']['post_title'] = 'タイトル1';
$name['a']['guid'] = 'ガイド1';
$name['a']['post_content'] = 'ポストコンテンツ1';
$name['b']['post_title'] = 'タイトル2';
$name['b']['guid'] = 'ガイド2';
$name['b']['post_content'] = 'ポストコンテンツ2';
//}
?>

<script>
//JavaScript
var title = new Array();
var content = new Array();
var date = new Array();

<?
//抽出結果の出力
foreach ($name as $key => $value){
echo "title['".$key."'] = '".$value['post_title']."';\n";
echo "content['".$key."'] = '".$value['post_content']."';\n";
echo "date['".$key."'] = '".date('l jS \of F Y h:i:s A')."';\n";
}


?>
//ブログタイトルの出力
function blog_title(id){
if(title[id] != undefined){
document.write(title[id]);
}
}

//本文の出力
function blog_content(id){
if(date[id] != undefined){
document.write(content[id]);
}
}

</script>
<a href="javascript:void(0);" onclick="blog_title('a')">ブログタイトル1</a>
<a href="javascript:void(0);" onclick="blog_title('b')">ブログタイトル2</a>

<a href="javascript:void(0);" onclick="blog_content('a')">ブログコンテンツ1</a>
<a href="javascript:void(0);" onclick="blog_content('b')">ブログコンテンツ2</a>
-----------------------
このまま動くものを以下においておきました。
http://g.gti.jp/php/blog/blog.php

参考になれば幸いです。

質問した人からのコメント

2011/3/24 09:32:27

原因が判明しました。MySQLのlongTEXT型では、
改行コードも含んだ形で格納されてしまう為、
document.writeが改行コードを処理できずエラーになっていました。
正規表現で改行コードを削除し実行した所、正常に表示されました。
お手数おかけしました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる