【问题标题】:How to validate a div according to cookie set in Jquery如何根据 Jquery 中设置的 cookie 验证 div
【发布时间】:2014-09-16 20:11:37
【问题描述】:

我在 Jquery 中根据屏幕宽度设置 cookie。像这样

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
$(document).on('pageinit','#outerPage',function(){

   var windowWidth = $(this).width();
  // alert(windowWidth);
   if(windowWidth <290)
   {    
       console.log('cookie:small');
       $.cookie("adds", 0);
       //setTestCookie("adds","0");
   }
   else
   {   
    console.log('cookie :Big');
       $.cookie("adds", 1);
      //0setTestCookie("adds","1");
   }
});
</script>

然后我使用这些 cookie 来验证 php 中的 div 以及同一个文件中的一些其他参数,就像这样

<?php
    if($current_item == 2 && $_COOKIE['adds'] == '1')
    {
    //place the adsense after the third ad.
    ?>
    <div id="bloque" class="addsTpl addBigphone" style="min-height:90px">
    <div class="google_add">
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- resultmobile -->
    <ins class="adsbygoogle"
         style="display:inline-block;width:320px;height:90px"
         data-ad-client="ca-pub-765756"
         data-ad-slot="657567"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script></div>
    </div     
    <?php
    }
?>

到目前为止一切顺利。我面临的问题是 if() 语句仅在我重新加载页面后才变为真。

我的理解是cookie是在服务器if()语句第一次执行后设置的,因为jquery只有在服务器脚本加载完成后才会执行。

任何人都可以建议我使用任何其他方法来做到这一点。

感谢和问候

【问题讨论】:

  • php在服务器端运行,所以页面重新加载后当然可见,尝试在客户端实现你的逻辑

标签: javascript php jquery cookies jquery-cookie


【解决方案1】:

没错,服务器端代码首先运行并为您提供页面,然后才执行 javascript - 这对您来说太晚了

您可以移动您运行的窗口大小测试以将 cookie 设置到应用程序中的较早页面(例如登录页面),或者您可以拥有一个运行您的 javascript 然后立即重定向到您的主页面的“隐藏”页面页面例如

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
$(document).on('pageinit','#outerPage',function(){

   var windowWidth = $(this).width();
  // alert(windowWidth);
   if(windowWidth <290)
   {    
       console.log('cookie:small');
       $.cookie("adds", 0);
       //setTestCookie("adds","0");
   }
   else
   {   
    console.log('cookie :Big');
       $.cookie("adds", 1);
      //0setTestCookie("adds","1");
   }
   // redirect to the actual page you want
   document.location.href = 'new main page url'
});
</script>

所以你的隐藏页面永远不会呈现 - 它只是运行 javascript 然后重定向到主页。

希望有所帮助 加勒特

【讨论】:

  • 是的,暂时我正在我的索引页上执行代码:P。它的伎俩但是。假设我们在电子邮件中向用户发送了一个 url,其中包含我有谷歌添加的页面。所以在那种情况下我的代码没有运行。也许我会尝试使用您提到的其他选项:)。
  • 您可以查看的另一件事是使用 javascript 将整个 div 及其内容注入 DOM(正如 Teo 暗示的那样),在客户端执行所有操作。事实上,您可以使用 'display: none' 样式在您的页面上拥有整个 div,并且只运行 '(adsbygoogle = window.adsbygoogle || []).push({});' javascript 如果窗口足够大
  • 是的,这可能是一种可能性,但如果我在一个页面中保留两个添加,那么谷歌将阻止我的 add-sense 帐户,因为它违反了谷歌在同一页面上保留多个添加的政策。虽然添加是不可见的,但在 DOm 中它们将存在并且何时存在。 google bot 发现,然后它会阻止该帐户
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多