web-dev-qa-db-ja.com

アクセスPHP外部javascriptファイルからの変数

次のようなJavascriptでPHP varにアクセスできます。

<?php
    $fruit = "Apple";
    $color = "red";
?>

<script type="text/javascript">
    alert("fruit: " + "<?php echo $fruit; ?>"); // or shortcut "<?= $fruit ?>"
</script>

しかし、外部JSファイルを使用する場合はどうなりますか。

<script type="text/javascript" src="externaljs.js"></script>

externaljs.js:

alert("color: " + "<?php echo $color; ?>");
51
FFish

実際にアクセスするのではなく、ページを提供するときにJavaScriptコードに挿入します。

ただし、他のJavaScriptが外部ソースからのものでない場合は、次のようなことができます。

<?php
    $color = "Red";
?>
<script type="text/javascript">var color = "<?= $color ?>";</script>
<script type="text/javascript" src="file.js"></script>

そして、file.jsで次のような色を使用します。

alert("color: " + color);
91
Don

このように、JavaScriptのphpスクリプト(ここではjQueryを使用します)からデータにアクセスすることもできます。

このようなPHPファイル内に入力隠しフィールドを作成します

<input type="hidden" id="myPhpValue" value="<?php echo $myPhpValue ?>" />

javascriptファイルで:

var myPhpValue = $("#myPhpValue").val();
//From here you can the whaterver you like with you js Value
if(myPhpValue != ''){
//Do something here
}

これも仕事をします:)

12
Atanas Kovachev

私が見たのは、.jsファイルをphpインタープリターで実行させることです。 推奨できません

私がお勧めするのは、AJAXを介して値を取得し、PHPファイルが値をJSファイルに返すようにすることです。これははるかにクリーンな方法です。

8
Ólafur Waage

まず、他のプログラムの変数に実際にアクセスできるプログラムはないことを理解する必要があります。

それに気づいたら、残りは簡単です。
メインファイルにjs変数を設定して外部jsを含めるか、PHPによって生成されたこの外部jsを動的にすることができます。

4

おそらく必要なものは、非同期JavaScriptおよびXML(AJAX)と呼ばれます: http://www.w3schools.com/ajax/default.aspa

基本的に、クライアントのJavaScriptからサーバー上のPHPスクリプトにメッセージを送信できることを想像してください。あなたが与えた例(externaljs.js)では、スクリプトはサーバーに$ colorは、HTTP経由です。スクリプトタグは、必要なJavaScriptを生成するPHPスクリプト。

汚染チェック、データ検証、セキュリティについてある程度理解しておくと役立ちます;)

4
TerryP

他の人が言っているように、javascriptはphp変数にアクセスできません。ただし、DOMにはアクセスできます。したがって、phpを使用して、ページ要素に属性を追加できます。そして、javascriptを使用してこれらの属性にアクセスできます。

例えば<div id='Apple' class='red'>はjavascriptで完全に利用可能です

3
dnagirl
<script type="text/javascript" src="externaljs.js"></script>

に変更できます

<script type="text/javascript" src="externaljs.php"></script>

そしてPHPスクリプトはそのようなJavaScriptを書くことができます:

<?php
$fruit = "Apple";
echo 'var fruit = '.json_encode($fruit);
...

AJAXのようにSepehr Lajevardiのほうがずっときれいだろう

1
Serty Oan

ドンの解決策は良いです、さらに外部のjavasciptでphp配列を使用したい場合、これはあなたを助けることができます:

PHP:

<?php
    $my_php_array = [];
?>     

HTML:

<script type="text/javascript"> var my_js_array = <?php echo json_encode($my_php_array);?> ; </script>
<script src = "../public/js/my-external-js.js"></script>

Javasript:(通常のJavascript配列のように配列を使用できるようになりました)

 my_js_array[0] 
 my_js_array.length
1
Mr Rubix

externaljs.jsは静的ファイルです。もちろん、PHP data。にアクセスできません。PHP dataをjsファイルに渡す唯一の方法は、ファイルに書き込むことによってファイルを物理的に変更することですPHPスクリプトで。ただし、これはせいぜい面倒な解決策です。

Furlafur Waageの回答に応じて編集します。jsファイルへの書き込みはonlyの方法ではないと思います。 jsをPHPインタープリターに通すことは、私の心を決して横切ることはありませんでした(正当な理由のため)。

1

2017-2018以降のソリューション:

まだ誰もそれを持ち出しておらず、関数_base64_encode_と_json_encode_を結合することを誰も考えていないので、PHPそのような配列変数を送信することさえできます:

index.php

_<?php
      $string = "hello";
      $array = ['hi', 'how', 'are', 'you'];
      $array = base64_encode(json_encode($array));
_

次に、次のようなクエリ文字列のパラメータを使用して、目的のjsファイルを読み込むことができます。

_echo '<script type="text/javascript" src="js/main.php?string='.$string.'&array='.$array.'">';_

次に、_js/main.php_は、たとえば次のようになります。この方法で変数をテストできます。

js/main.php

_    <?php
    if ($_GET['string']) {
        $a = $_GET['string'];
    }
    if ($_GET['array']) {
        $b = $_GET['array'];
    }
    $b = json_decode(base64_decode($b));

    echo 'alert("String $a: + '.$a.'");';
    echo 'alert("First key of Array $array: + '.$b[0].'");';
    exit();
    ?>
_

_index.php_を開くと、以下が出力されます。ご覧のとおり、_js/main.php_を開かずに、そこからjavascript機能を取得しています。

enter image description here

1
AlexioVay

他のことと同じようにinclude()できます:

<?php
    $fruit = "Apple";
    $color = "red";
?>

<script type="text/javascript">
    <?php include('/path/to/your/externaljs.js'); ?>
</script>

これは基本的に、外部ファイルをインラインjsとしてレンダリングします。ここでの主な欠点は、ブラウザのキャッシュによる潜在的なパフォーマンスの利点が失われることです。一方、JavaScriptでphp変数を再宣言するよりもはるかに簡単です。

0
billynoah

あなたはそれをすることはできませんし、これは推奨されるアプローチではないので試してはいけませんが、外部のjsで書かれた関数に関数パラメータとしてphp変数を渡すことができます

0
sushil bharwani