web-dev-qa-db-ja.com

パス PHP インラインJSなしのJavaScriptへの変数

だから みんなそして彼らのmother はPHP変数をクライアント側に渡すために wp_localize_script を使うように言う。機能が実際にこの目的のために作られていなくても、みんながそれをします。 Q-Tipsのようなもの:耳を掃除するために作られたものではなく、みんなとにかくやっています。

技術が進歩し、一般的に物事に対してインラインで反対する人々がいるので、これらすべての小さな変数に対してインラインスクリプトを作成することは望ましくありません。 Content Security Policy HTTPヘッダーを使用したいので、私は特に運命的です。単純な クールな方法ではありません インラインJSを使用すること(さらに悪いことに、 動的 インラインJS、それをsha256することはできません)とCSPを使用すること。

厄介なインライン<script>ブロックを作成せずにPHPクライアント側で変数セットを渡すために他の方法を使用できますか。

WebServiceが変数をクライアント側にプッシュする可能性がありますか?変数が変更されてブラウザのキャッシュが更新された場合、PHP生成された動的ハッシュを含むphp_variables.jsファイル他のアイデア?

1
Dennis G

テストされていませんが、うまくいくかもしれません.

javaScriptファイル:

jQuery( document ).ready(function() {
    jQuery.ajax({
        url: // !! hardcode the URL of WP admin-ajax.php here, since you don't want to use wp_localize_script() to pass it in...
        type: 'POST',
        data:{
            action: 'some_action', // this is the function (via wp_ajax_ hook) that will be triggered
        },
        success: function( data ){
            var returned_data = JSON.parse(data);
        }
    });  // jQuery.ajax
});

phpファイル:

wp_enqueue_script( 'my-ajax-js', 'url of my .js file', array('jquery'), "1.0.0", true);

function get_some_variables() {
    $return_data = array("one","two","three","four");
    echo ( json_encode($return_data) );
    wp_die();
}
add_action( 'wp_ajax_some_action', 'get_some_variables' );

(編集)私は付け加えるべきです。これはいくつかのphp変数のためのブラウザへの一方通行のためのたくさんのオーバーヘッドです。なぜwp_localize_script()を使いたくないのか、私は興味がありますか?

Php変数をDOMに入れるためのもう1つの無謀なカウボーイの方法は、JSONエンコードされたストリングを隠し<div>にエコーし、次にjsを使用してそのdivからコンテンツを取り出すことです。プレーンテキストで公開されていても構わない少量のデータの場合は、これも機能します。

2
C C