如何在JavaScript或jQuery中访问PHP变量而不是<?php echo $ variable?>

如何在JavaScript或jQuery中访问PHP变量? 我需要写吗?

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

我知道我可以在Cookie中存储一些变量,并通过cookie访问这些值,但Cookie中的值是相对稳定的值。 此外,还有一个限制,你不能在cookie中存储很多值,而且方法不是那么方便。 有没有更好的方法来做到这一点?

您的示例显示了将PHP变量传递给JavaScript的最简单方法。 你也可以使用json_encode来处理更复杂的数组:

 <?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> 

除此之外,如果你真的想在PHP和JavaScript之间“交互”,你应该使用Ajax。

使用cookie是非常不安全和不可靠的方式,因为它们存储在客户端,因此可以进行任何操作,甚至不会被接受/保存。 不要将它们用于这种类型的交互。 jQuery.ajax是一个很好的开始恕我直言。

如果AJAX不是一个选项,你可以使用嵌套的数据结构来简化。

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

基本上,是的。 你写alert('<?php echo($phpvariable); ?>');

还有一些其他的互操作方式,但是我不能认为这些方法和上面一样简单(或者更好)。

你在问一个由两部分组成的问题。 至于语法(我认为自PHP4?),你可以使用:

 <?=$var?> 

…如果PHP被配置为允许它。 它在大多数服务器上。

就存储用户数据而言,您也可以选择将其存储在会话中:

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

从页面到页面的持久性。 你当然也可以使用数据库。 你甚至可以在PHP中存储会话变量。 这取决于你需要什么。

我会说echo()直接把它们放到Javascript源代码中是最可靠和向下兼容的方式。 留在那里,除非你有一个好的理由不要。

为我正在编写的网站构建自定义分页时,遇到了类似的问题。

我在functions.php中创建的全局变量被定义并设置为0.我可以使用上面概述的方法@Karsten在我的javascript中输出这个值。 问题在于更新PHP文件中最初设置为0的全局变量。

这是我的解决方法(哈克?我知道!)但在紧张的最后期限挣扎了一个小时后,下面的工作:

在archive-episodes.php里面:

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

在functions.php里面

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

为了简单起见 ,我通过alert在$ ajax.success回调中输出了totalPageCount变量。

 $.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 } 

无论如何,我希望这可以帮助别人! 如果任何人有一个“不太好的”版本或最佳实践的例子,我全是耳朵。