【问题标题】:Laravel: Trouble displaying JavaScript inside Blade @if blockLaravel:无法在 Blade @if 块中显示 JavaScript
【发布时间】:2018-12-07 01:05:40
【问题描述】:

有没有可能做这样的事情...

@if(Session::has('foo'))
    <script>
    // My JavaScript function
    </script>
@endif

我只在存在某个会话变量时才尝试放置 Facebook 像素代码。

请指教。


请注意[更新]:会话变量正常。我可以阅读它。问题在其他地方。这让我很困惑。

代码如下:

@if(session('displayPixelCode'))
    #1. Session variable's value is : {{ session('displayPixelCode') }}          
    <script>
        // My JavaScript code goes here 
    </script>
@else
    #2. Session variable's value is : {{ session('displayPixelCode') }}
    <script>
        // My JavaScript code goes here 
    </script>
@endif

如果我查看 渲染视图 的底部,我会看到这个(会话变量的正确值)...

如果我查看 渲染页面源,我会看到这一点(@else 分支被执行)。

【问题讨论】:

  • 你试过了吗?
  • 是的...不起作用。会话变量很好。我可以在那里显示一个随机文本......但显然
  • 您是否尝试在脚本标签内添加警报并查看是否触发?
  • 是的,行得通。但我想做的是在打开和关闭
  • 您是否仔细检查过

标签: php laravel-5.1 laravel-blade


【解决方案1】:

我终于弄清楚是什么原因造成的。不得不使用!is_null(session('displayPixelCode'))

这是现在的样子:

@if(!is_null(session('displayPixelCode')))
    <script>
        !function(f,b,e,v,n,t,s)  
        {if(f.fbq)return;n=f.fbq=function(){n.callMethod?  
        n.callMethod.apply(n,arguments):n.queue.push(arguments)};  
        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';  
        n.queue=[];t=b.createElement(e);t.async=!0;  
        t.src=v;s=b.getElementsByTagName(e)[0];  
        s.parentNode.insertBefore(t,s)}(window, document,'script',  
        'https://connect.facebook.net/en_US/fbevents.js');  
        fbq('init', 'xxxxxxxxxxxxxxxx');  
        fbq('track', 'PageView');  
        fbq('track', 'Lead');  
    </script> 
    <noscript>
        <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=xxxxxxxxxxxxxxxx&ev=PageView&noscript=1"/>
    </noscript>       
@endif

【讨论】:

  • 这听起来很奇怪,因为if(null) 的计算结果总是false(参见3v4l)。
  • 我觉得没问题。 IF 语句是说如果某个变量不为空(即它存在),则执行某些操作。见3v4l.org/eXrME
  • 嗯,你是对的,!is_null($value) 将返回false 的唯一情况是值实际上是null。与此相反,一个简单的if($value) 也会在0''/""(空字符串)或false 时认为$value 为假。当我查看您的示例时,如果session('displayPixelCode') 返回上述之一,我无法想象您想要打印 JavaScript 代码。对我来说,只有当这个会话变量返回 true1 作为替代时,输出 JS 代码才有意义。所以说实话,我认为你的解决方案很危险。
  • 我也在检查 isset。你建议我应该怎么做? If($value) 不起作用。这很令人困惑。请在问题中查看我的更新。
猜你喜欢
  • 2017-01-05
  • 2021-09-04
  • 2017-11-26
  • 2020-10-10
  • 2018-02-04
  • 2021-03-08
  • 2018-04-25
  • 2018-03-02
  • 2016-10-02
相关资源
最近更新 更多