如何使用Javascript基于cookie交换div?

时间:2012-05-12 18:23:07

标签: javascript wordpress session caching cookies

我正在为客户更新wordpress网站。我不得不打开服务器端缓存,因为由于插件太多,网站速度很慢。我无能为力,无法禁用插件。

其中一个插件要求用户输入电子邮件以下载文件。如果插件看到有效的电子邮件,则会设置会话变量。然后页面重新加载。如果设置了该会话变量,则该站点将显示下载按钮,而不是输入电子邮件表单字段和按钮。

由于启用了服务器端缓存,因此此功能将丢失。所以,我想要做的是设置一个cookie,然后检查cookie客户端,并交换div的内容(id =“download”)。我对Javascript做的并不多,而且我无法正常工作。

我在PHP中设置了这样的cookie:

setcookie( 'show_download', 1 );

我已经设置了div的新内容(动态生成),如下所示:

setcookie( 'new_content', '<div class="btn-ss-downloads"><a target="_blank" href="/wp-content/plugins/ss-downloads/services/getfile.php?file=4v-zR6fc6f/9vaROBr/dTJd/Tg/D 0-dT.vBx">Download Series 20 Datasheet</a></div>' );

我有一个函数来读取Javascript中我从另一篇文章中获取的cookie:

<script type="text/javascript">

    function readCookie(name) {
        var ca = document.cookie.split(';');
        var nameEQ = name + "=";
        for(var i=0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return "";
    }

</script>

看似正确的功能是调用readCookie( 'show_download' );。如果值= 1,则将<div id="download"></div>的内容与存储在new_content Cookie中的内容进行交换。

如果我在这里展示的作品,我如何在Javascript中完成这项工作?我想在我的Wordpress标题中添加一个javascript函数,如果它可以在这里工作。似乎我可以在页面渲染/加载后运行此函数。我对浏览器和javascript的操作顺序并不十分熟悉。请帮忙。

2 个答案:

答案 0 :(得分:0)

这是你要找的吗?

(<head>)
<script type='text/javascript'>
    var showDownload = localStorage.getItem("showDownload") //or readCookie()
    if (showDownload == 1) {
        $(document).ready(function(){
            $("div.btn-ss-downloads").html("<a target='_blank'...</a>")
        )};
    }
</script>
(</head>)

请参阅http://api.jquery.com/html/https://developer.mozilla.org/en/DOM/Storage#localStorage

这使用jQuery,你可以使用它来包含:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>

(这是我提倡使用jQuery这么简单的几次之一,因为$(document).ready太棒了!)

答案 1 :(得分:0)

你为什么不考虑AJAX?

如果要求是检查地址的有效性,然后执行某些服务器操作以显示按钮,那么它看起来是使用AJAX的好地方。

$.post("downloader.php", { eml: mail_id })
    .done(function(data){ 
      if(data != "")
        $("div.btn-ss-downloads").html('<a href="' + data + '">Download</a>');
    });

这假设downloader.php执行必要的检查并返回下载URL。您可以将此逻辑(现在似乎是主页面的一部分)分隔为downloader.php