2

我正在尝试在 php 文件中使用 jQuery 设置 php 变量。

在我的 php 文件中,我想运行一个 jQuery 脚本来测试条件是否如此,如果是这样,它将一个 php var 设置为一个值,否则它将它设置为另一个值,以便我以后可以在 php.ini 中使用它。

我正在使用它来尝试根据窗口大小在 wordpress 中设置背景图像的大小。不过现在,我只是想回显变量 ( $bg_img_r)。这是我所拥有的:

<?php function bg_size() { ?>
    <script>
        jQuery(document).ready(function($) {
            if ($(window).height()>720;  {
                <?php $bg_img_r = wp_get_attachment_image_src( $bg_img_id, 'fullbg' ); ?>
            }
            if ($(window).height()<720; {
                <?php $bg_img_r = wp_get_attachment_image_src( $bg_img_id, 'smallbg' ); ?>
            }
        });
    </script>
<?php } ?>

<?php
    echo $bg_img_r;
?>

当我这样做时,我得到$bg_img_r一个未定义变量的错误。

4

2 回答 2

1

在 Javascript 甚至有机会执行之前,PHP 完全发生在服务器端。服务器将 HTML 传递给客户端浏览器,然后浏览器运行 Javascript。因此,不可能使用 javascript 变量来影响 PHP 执行。您必须使用更复杂的系统。

解决基于窗口高度有条件地设置背景图像的问题的最简单方法可能是根本不在服务器端设置它,而是包含包含两种可能性的数据属性,并稍后使用 javascript 填充正确的属性。例如,您可以像这样包含数据属性:

<div id="content-with-background"
    data-fullbg-src="<?php echo wp_get_attachment_image_src( $bg_img_id, 'fullbg' ); ?>"
    data-smallbg-src="<?php echo wp_get_attachment_image_src( $bg_img_id, 'smallbg' ); ?>"
>
    <!-- html contents -->
</div>

然后使用 jquery 适当地设置背景:

$('document').ready(function() {
    var key = ($(window).height() > 720 ? 'fullbg-src' : 'smallbg-src');
    var $content = $('#content-with-background');
    $content.css('background-image', 'url(' + $content.data(key) + ')');
});

此 javascript 代码可能位于.js包含 using 的文件中<script src="..."></script>,但您也可以根据需要将其直接嵌入<script type="text/javascript">...</script>"标签中。

这只是一种可能性。还有其他解决方案,例如使用 php 输出 javascript 变量来存储背景,然后有条件地设置它们,或者使用 AJAX 检索适当的背景 url 并使用它(尽管我不推荐 AJAX 用于此解决方案,因为它是不必要的额外服务器调用,它会减慢速度)。您甚至可以使用 css3 媒体查询并输出动态创建的 css 文件(这可能是一个优雅的解决方案,但设置起来并不简单)。一些浏览器甚至会发送包含窗口大小的 http 标头,如果您的整个客户端都使用此类浏览器,您可以使用这些标头(但此解决方案需要特定条件,这些条件通常不存在于通用 Web 应用程序中)。

于 2013-05-09T04:12:44.967 回答
0

你不能这样做。php 处理文件并将输出发送到远程计算机。jquery 由用户计算机处理,所以当 jquery 运行时,服务器已经摆脱了这个页面。

听起来您想要做的是一个 jquery ajax 回调到服务器以获取您正在寻找的数据。

于 2013-05-09T04:02:02.263 回答