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