web-dev-qa-db-fra.com

Passer PHP variable en JavaScript sans JS en ligne

Alors tout le mondeetleurmère dit d'utiliser wp_localize_script pour passer PHP variables côté client. Même si la fonction n’a pas été créée à cette fin, tout le monde le fait. Un peu comme les Q-Tips: pas faits pour le nettoyage des oreilles, tout le monde le fait quand même.

Avec la technologie qui avance et les gens généralement opposés aux choses en ligne, je ne veux pas de script en ligne pour toutes ces petites variables. Je suis particulièrement condamné parce que je veux utiliser l'en-tête Politique de sécurité du contenu HTTP. Il n’ya tout simplement pas n’est pas une bonne façon d’avoir un JS en ligne (même pire: dynamique un JS en ligne, vous ne pouvez pas jouer ça) et d’avoir un CSP.

Quels autres moyens puis-je utiliser pour passer une variable définie dans le côté client PHP sans créer de mauvais blocs <script> en ligne?

Peut-être qu'un WebService pourrait envoyer des variables côté client? Un fichier PHP généré php_variables.js avec un hachage dynamique si une variable a été modifiée, de sorte que le navigateur mette à jour l'actualisation? D'autres idées?

1
Dennis G

Non testé mais ça alors, ça pourrait marcher ...

fichier 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
});

fichier 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' );

(EDIT) Je devrais ajouter..cela est BEAUCOUP de frais généraux pour un aller simple vers le navigateur pour certaines variables php. Je suis curieux de savoir pourquoi vous ne voulez pas simplement utiliser wp_localize_script()?

Un autre moyen téméraire de cow-boy pour importer des variables php dans le DOM consiste à faire écho la chaîne encodée JSON à un <div> caché, puis à utiliser js pour extraire le contenu de cette div. Pour de petites quantités de données qui ne vous intéressent pas si elles sont exposées en texte brut ... cela fonctionne aussi.

2
C C