アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPファイルで定義した変数を引数としてJvaScrptファイルに渡す方法がわかりません。どうしたらいいでしょうか?具体的には、

***.php
<?php
class *** {
public function printhello() {
$i = "Hello World!";
echo $i;
}
public function aXces() {
$title = "***会社";
$link = "***.php";
$palam = $_POST[name]
echo "<a href=\"$link\" onclick=\"hL($palam)\">$title</a>";
}
}
?>
この$palamをJavaScriptのファイルに渡したいんです。
***.js
function hL($palam) {
document.body.innerHTML=document.body.innerHTML.replace(/$palam/g,'<span style=\"background-color : yellow\">$palam</span>');focus();
}
ってやってもなかなかうまくいきません。どうすればいいですか?

A 回答 (5件)

javascriptの方には$付けなくてよのではー

    • good
    • 0
この回答へのお礼

お返事ありがとうございます。参考にさせていただきました。

お礼日時:2009/09/08 10:37

やりたい事がよくわかりません。


そのPHPを呼び出す(POST元)のHTMLソースと、
PHPに出力させたいHTMLソースを提示してみてください。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。参考にさせていただきました。

お礼日時:2009/09/08 10:37

>echo "<a href=\"$link\" onclick=\"hL($palam)\">$title</a>";


$palamの前後に'を付けないとJavascriptとしてエラーになります。
あとparamです。

この回答への補足

お返事ありがとうございます。参考にさせていただきました。それでなのですが、PHPからJavaScriptに変数を引数として渡すことは、
document.write(answer);
で成功したことが確認できましたが、
document.body.innerHTML=document.body.innerHTML.replace(/$palam/g,'<span style=\"background-color : yellow\">$palam</span>');
focus();
の部分がうまくいきません。どうしてでしょうか?何かいいアドバイスはありませんか?

補足日時:2009/09/08 10:38
    • good
    • 0

> echo "<a href=\"$link\" onclick=\"hL($palam)\">$title</a>";


既に回答がありますが、’(シングルクォーテーション)で囲めば、求めている処理は満たせるかと思います。
ただ入力された値をそのままHTMLに出力するのはよく知られた脆弱性ですので、なるべくやらないように気を付けた方が良いです。
以下のように修正すれば、’(シングルクォーテーション)などを入力されても、問題ありません。

$palam = htmlspecialcharactors($_POST[name])
echo "<a href=\"$link\" onclick=\"hL('$palam')\">$title</a>";

この回答への補足

お返事ありがとうございます。参考にさせていただきました。それでなのですが、PHPからJavaScriptに変数を引数として渡すことは、
document.write(answer);
で成功したことが確認できましたが、
document.body.innerHTML=document.body.innerHTML.replace(/$palam/g,'<span style=\"background-color : yellow\">$palam</span>');
focus();
の部分がうまくいきません。どうしてでしょうか?何かいいアドバイスはありませんか?

補足日時:2009/09/08 10:41
    • good
    • 0

JavaScriptの方でもエラーになっていたのですね。


見落としていました。こちらでどうでしょうか?

function hL($palam) {
var re = eval('/'+$param+'/g');
document.body.innerHTML=document.body.innerHTML.replace(re,'<span style=\"background-color : yellow\">'+$palam+'</span>');
focus();
}
PHPと混同しているようですが、以下の点が異なります。
・PHPには変数に$が必須だが、JavaScriptでは不要
・PHPで"で囲まれた変数は解釈されますが、JavaScriptでは解釈されません。
・PHPは'で囲まれた文字列を.で結合させるが、JavaScriptでは'もしくは"で文字列を囲み+で結合させます。

/で囲まれた箇所は、文字列ではなく正規表現オブジェクトで、ちょっと特殊な処理をしています。
一度、生成したい正規表現オブジェクトを文字列で生成し、eval関数という文字列をJavaScriptのコードとして解釈させることで、最終的な正規表現オブジェクトを生成しています。
以下の例の方が分かり易いかもしれません。
例)
var param = 'abc';
var re_str = '/'+param+'/g'; // '/abc/g'(文字列)
var re = eval(re_str); // /abc/g (正規表現オブジェクト)
'abcdefgabcdefgabcdefg'.replace(re,'<span>'+$param+'</span>'); // <span>abc</span>defg<span>abc</span>defg

PHPはサーバー側の処理で、JavaScriptはクライアント側の処理なので、処理は相容れません。
関数を.jsファイルで定義しているのであれば、PHPの文法などに引きずられず、JavaScriptに注力すればよいかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。おかげで解決しました。これからもよろしくお願いします。

お礼日時:2009/09/09 13:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!