Comment accéder aux variables PHP en JavaScript ou jQuery plutôt que <? Php echo $ variable?>

Comment puis-je accéder aux variables PHP en JavaScript ou jQuery? Dois-je écrire

<?php echo $variable1 ?> <?php echo $variable2 ?> <?php echo $variable3 ?> ... <?php echo $variablen ?> 

Je sais que je peux stocker certaines variables dans les cookies et accéder à ces valeurs via des cookies, mais les valeurs dans les cookies sont des valeurs relativement stables. En outre, il existe une limite, vous ne pouvez pas stocker de nombreuses valeurs dans les cookies, et la méthode n'est pas pratique. Y a-t-il une meilleure façon de le faire?

Votre exemple montre la manière la plus simple de passer des variables PHP à JavaScript. Vous pouvez également utiliser json_encode pour des choses plus complexes comme les tableaux:

 <?php $simple = 'simple string'; $complex = array('more', 'complex', 'object', array('foo', 'bar')); ?> <script type="text/javascript"> var simple = '<?php echo $simple; ?>'; var complex = <?php echo json_encode($complex); ?>; </script> 

En dehors de cela, si vous voulez vraiment «interagir» entre PHP et JavaScript, vous devez utiliser Ajax.

L'utilisation de cookies pour cela est très dangereuse et peu fiable, car ils sont stockés sur le site et donc ouverts à toute manipulation ou ne seront même pas acceptés / sauvegardés. Ne les utilisez pas pour ce type d'interaction. JQuery.ajax est un bon début IMHO.

Si AJAX n'est pas une option, vous pouvez utiliser des structures de données imbriquées pour simplifier.

 <?php $var = array( 'qwe' => 'asd', 'asd' => array( 1 => 2, 3 => 4, ), 'zxc' => 0, ); ?> <script>var data = <?php echo json_encode($var); ?>;</script> 

Fondamentalement, oui. Vous écrivez une alert('<?php echo($phpvariable); ?>');

Il existe d'autres façons d'interopérer, mais rien de ce que je ne peux penser à être aussi simple (ou mieux) que ce qui précède.

Vous posez une question en deux parties. En ce qui concerne la syntaxe (je pense depuis PHP4?), Vous pouvez utiliser:

 <?=$var?> 

… si PHP est configuré pour l'autoriser. Et c'est sur la plupart des serveurs.

En ce qui concerne le stockage des données utilisateur, vous avez également la possibilité de le stocker dans la session:

 $_SESSION['bla'] = "so-and-so"; 

Pour la persistance d'une page à l'autre. Vous pouvez également bien sûr utiliser une base de données. Vous pouvez même avoir PHP stocker les variables de session dans le db. Cela dépend simplement de ce dont vous avez besoin.

Je dirais que echo () les intégrant directement au code source Javascript est le moyen le plus fiable et le plus descendant. Restez avec cela, sauf si vous avez une bonne raison de ne pas le faire.

J'ai rencontré un problème similaire lors de la création d'une pagination personnalisée pour un site sur lequel je travaille.

La variable globale que j'ai créée dans functions.php a été définie et définie sur 0. Je pourrais générer cette valeur dans mon javascript sans problème en utilisant la méthode @Karsten décrite ci-dessus. Le problème était la mise à jour de la variable globale que j'ai initialement mis 0 dans le fichier PHP.

Voici ma solution de contournement (hacky? Je le sais!) Mais après avoir lutté pendant une heure sur un délai serré, les travaux suivants:

Inside archive-episodes.php:

 <script> // We define the variable and update it in a php // function defined in functions.php var totalPageCount; </script> 

Inside functions.php

 <?php $totalPageCount = WP_Query->max_num_pages; // In my testing scenario this number is 8. echo '<script>totalPageCount = $totalPageCount;</script>'; ?> 

Pour le simplifier, je produisais la variable totalPageCount dans un rappel $ ajax.success via l'alerte.

 $.ajax({ url: ajaxurl, type: 'POST', data: {"action": "infinite_scroll", "page_no": pageNumber, "posts_per_page": numResults}, beforeSend: function() { $(".ajaxLoading").show(); }, success: function(data) { //alert("DONE LOADING EPISODES"); $(".ajaxLoading").hide(); var $container = $("#episode-container"); if(firstRun) { $container.prepend(data); initMasonry($container); ieMasonryFix(); initSearch(); } else { var $newItems = $(data); $container.append( $newItems ).isotope( 'appended', $newItems ); } firstRun = false; addHoverState(); smartResize(); alert(totalEpiPageCount); // THIS OUTPUTS THE CORRECT PAGE TOTAL } 

Quoi qu'il en soit, j'espère que ça aide les autres! Si quelqu'un a une version "moins agressive" ou un exemple de pratique exemplaire, je suis tout l'oreille.