【问题标题】:Populating js array in blade template在刀片模板中填充 js 数组
【发布时间】:2013-08-29 01:03:22
【问题描述】:

我正在尝试根据 php DB 查询的结果构建一个用于 flot 的 javascript 数据数组。

当我输出数字时($lic->Users)很好,但每当我尝试输出字符串时,我会在浏览器中看到一个完全空白的页面。

我试过了:

  • {{ $lic->CompanyName }}
  • "<?php echo $lic->CompanyName; ?>"
  • {{{ $lic->CompanyName }}}
  • '"'+ <?php echo $lic->CompanyName; ?> +'"'

但是当我对其进行硬编码(比如“公司名称”)时,它可以很好地构建条形图(并显示页面)。

var data = 
[
    @foreach($licdata as $lic)
    {
    'label': "{{ $lic->CompanyName }}",
    'data': [
                ["{{ $lic->CompanyName }}", {{ $lic->Users }}], 
                ["{{ $lic->CompanyName }}", {{ $lic->Emps }}]
            ]
    },
    @endforeach
];

我认为这一定与在js中引用/转义字符串有关,但我不知道是什么,有人知道正确的语法是什么吗?

【问题讨论】:

  • 你试过:'{{ $lic->CompanyName }}' ??
  • @ElLocoCocoLoco - 没用,和其他人一样。

标签: javascript blade


【解决方案1】:

这是我的错,我最终使用了:
"<?php echo $lic->CompanyName ?>"
{{ $lic->CompanyName }} 也可以,一旦我纠正了根本问题(区分大小写问题)。

使用Fiddler(我不能高度推荐)我发现空白浏览器页面(只是一个白页)是由我的页面中返回的以下内容引起的:

var data = 
[
    @foreach($licdata as $lic)
    {
    'label': "<!DOCTYPE html
<html>
  <head>

接着是一堆 html(head 标签、meta 标签、css 等)。

这是由于我的 SQL 中的字段名称(公司名称)的大小写略有不同。
MS SQL Server 不关心这种情况,PHP 关心(Companyname vs CompanyName)!

一旦 php/laravel 从结果集中创建对象,字段名就会成为属性,当您访问它们时,它们必须匹配以防万一。

始终检查您的 PHP 变量/对象的大小写,尤其是当框架将它们从记录自动转换为对象(或类似的东西)时。

【讨论】:

    【解决方案2】:

    后端更好的解决方案是将数据结构化为数组,关联或其他方式。

    然后返回:

    return view( 'view_required',[
         'my_var'=> json_encode($array_or_object, JSON_UNESCAPED_SLASHES );
    ]);
    

    正面:

    <script>
        var my_var = {!! $my_var !!};
    </script>
    

    【讨论】:

    • 我的问题是我使用的是{{ $my_var }} 而不是{!! $my_var !!};
    【解决方案3】:

    易威https://laravel.com/docs/8.x/blade#rendering-json

    <script>
         var app = {{ Js::from($array) }};
    </script>
    

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2014-09-14
      • 2018-09-25
      • 1970-01-01
      • 2014-03-01
      • 2020-09-22
      • 1970-01-01
      • 2017-07-03
      • 2013-04-29
      相关资源
      最近更新 更多