1

我想要的是从一个 JavaScript 部分获取颜色值到另一个充当 css 文件的 php 文件中。我看到了一些使用 ajax 的示例,但是它们不起作用,尽管 .done 和 .always 说数据已发送。所以这里是脚本部分和颜色值:

    var jCell = '#aabbcc';


 $(document).ready(function (){
  $.ajax({
    url: "view/stylesheet/supercharge.css",
    data: {cell: jCell},
    type: "POST",
    async: false })
    .done(function(cell) { console.log("success: "+ jCell); })
    .fail(function() { console.log("error"); })
    .always(function() { console.log("complete"); })
  });

这是 php 文件(充当 css),它应该使用 $_post 获取值,但它没有:

<?php header("Content-type: text/css; charset: UTF-8"); ?> 

<?php 

    $menuColor = '#121212';
    $headerColor = $_POST['cell'];
    $bodyColor = '#fffaaa';

?>

#header {
    background-color: <?=$headerColor; ?>;
}

有什么建议么?

谢谢。

4

4 回答 4

3

改变 -

url: "view/stylesheet/supercharge.css",

url: "view/stylesheet/supercharge.php",

你的cell是什么?它是一个全局变量吗?

于 2013-06-10T15:27:29.490 回答
0

希望我能发表评论!Swapnesh 是正确的,我只是在回答之前做了一些验证。大多数服务器不会使用 php 解析扩展名为 .css 的文件。将扩展名更改为 .php 将允许代码执行,但发送的标头指示响应为 css 类型,而不是默认的 html。这种技术也常用于 javascript 和纯文本文件。

我还可以补充一点,一般来说,直接使用 jquery 的css 方法应用动态 css 样式可能更容易/更有效

$('cell #header').css('background-color', jCell);

但是话又说回来,我不知道您使用 ajax 的所有原因,因为您没有详细说明总体思路,而是采取有帮助的方法,剩下的就不用说了。

编辑:您(尽管其他人更有可能阅读此内容)可能要注意的另一件事是短标签。并不是说您不能使用它们,只是要注意PHP 文档中的说明

短标签 ... 只有在通过short_open_tag php.ini 配置文件指令启用,或者 PHP 配置了 --enable-short-tags 选项时才可用。

在开发用于重新分发的应用程序或库时,或在不受您控制的 PHP 服务器上部署时,应避免使用短标签,因为目标服务器上可能不支持短标签。对于可移植、可再分发的代码,请确保不要使用短标签。

从 PHP 5.4 开始<?=,无论 short_open_tag 设置如何,短回显标签始终被识别并有效。

于 2013-06-10T15:50:27.863 回答
0

问题是仅仅通过 Ajax 加载文件不会激活页面中的样式。如果您希望 css 影响您的页面,则需要将其包含在您的页面中。你需要一些类似的东西。注意:这是未经测试的。

在顶部添加:

<script id="phpcss"><?php include(path/to/phpfile); ?></script>

然后在javascript中有这个:

var jCell = '#aabbcc';


$(document).ready(function (){
    $.ajax({
        url: "view/stylesheet/supercharge.css",
        data: {cell: jCell},
        type: "POST",
        success: function(data) {
            $("#phpcss").html(data);
        },
        async: false })
        .done(function(cell) { console.log("success: "+ jCell); })
        .fail(function() { console.log("error"); })
        .always(function() { console.log("complete"); })
    });

这应该从 ajax 调用中获取返回的 css 并将其放入当前文件的头部。

于 2013-06-10T15:48:29.650 回答
0

尝试将单元格放在引号中,例如

data: {'cell': jCell},

这也是

view/stylesheet/supercharge.php

似乎这是问题所在。

于 2013-06-10T15:31:03.427 回答