【问题标题】:Laravel 5.2 Javascript call with blade parameter带有刀片参数的 Laravel 5.2 Javascript 调用
【发布时间】:2016-09-22 19:37:30
【问题描述】:

我的 module.blade.php 中有(当前)以下代码:

@section('scripts')
  <script type="text/javascript">
      createMixin(['{{ $module }}']);
  </script>
@endsection

解释

  • $module 是一个变量,它包含一个包含简单 key => 值的 JSON,但也包含 key => 对象。它之前在 Controller 中加载并显示在 Blade.php 中。

例子:

{ "标题":"标题", “名称”:“虚拟”, “文件”:“虚拟”, “布局”:“正常”, “领域”:[ { “名称”:“布拉” } ] }

  • 函数 createMixin() 理想情况下会使用 $module 中的选项(已经存在)从 Jade 生成 HTML。

问题是:这确实以错误消息结尾:“htmlentities() 期望参数 1 为字符串,给定数组”

到目前为止完成:我已经尝试了几件事:

@section('scripts')
  <script type="text/javascript">
      var fields = $.parseJSON("{!! $module !!}");
      createMixin(fields);
  </script>
@endsection

还有:

@section('scripts')
  <script type="text/javascript">
      createMixin("{!! JSON.parse($module) !!}");
  </script>
@endsection

还有:

@section('scripts')
  <script type="text/javascript">
      createMixin("{!! json_encode($module) !!}");
  </script>
@endsection

还有:

@section('scripts')
  <script type="text/javascript">
      $(this).createMixin("{{ $module }}");
  </script>
@endsection

我在这里查看了几篇帖子(如this one)和其他来源,他们告诉人们使用 php implode 方法或只是简单地使用“{!! !!}”。但这一切都以相同的错误消息告终。

问题:我在这里忽略了什么?我做错了什么?


编辑:

根据我的 Javascript 函数的要求:

//generate one jade mixin
function createMixin(module) {
    //first load JSON...
    var json = $.parseJSON(loadJSON(module["file"]));
    //get options for mixin
    var options = json.fields;
    //detect jade file
    var jadepath = RESOURCES_DIR + "views/jade/" + json.file + "/template.jade";

    //check if file exists
    $.ajax({
        'url': jadepath,
        'type': 'HEAD',
        'error': function() {},
        'success': function () {
            var html = renderJade(options, jadepath);
            //save html into json
            json.html = html;
            var tmp = new Blob([html], { type: 'plain/text;charset=utf-8' });

        }
    });
};

【问题讨论】:

  • 你能告诉我,这个方法createMixin()是做什么的吗?你能告诉我们PHP接收端吗?因为消息"htmlentities() expects parameter 1 to be string, array given"是基于PHP端的。
  • @Qazi 添加了上面的 Javascript。我调用此函数并计划使用生成的 html 更改元素内容。我在这个测试中注释掉了大部分内容;我只有第一行代码,其余的都被注释掉了。
  • 您发布的其他每个示例是否都出现相同的错误?看起来第一个应该可以工作。也许仔细检查$module 中的内容?你应该可以简单地说:var fields = {!! $module !!}
  • @Tama 不,遗憾的是它不起作用......我完全不知道为什么。即使我只是在 Javascript 文件中执行 console.log 而不写任何其他内容,它也不会接受该变量...

标签: javascript php laravel-5.2


【解决方案1】:

好的,所以我找到了解决方案。

我必须先在 PHP 中进行参数初始化:

<?php $json = json_encode($module); ?>

然后分别通过以下方式调用Javascript函数:

@section('scripts')
  <script type="text/javascript">
      $(document).ready(function() {
          var module = {!! $json !!};
          createMixin(module);
      });
  </script>
@endsection

所以总的来说它看起来像这样:

<?php $json = json_encode($module); ?>

@section('scripts')
  <script type="text/javascript">
      $(document).ready(function() {
          var module = {!! $json !!};
          createMixin(module);
      });
  </script>
@endsection

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 2016-12-24
    • 2016-09-13
    • 2020-11-08
    • 2018-07-06
    • 2017-11-08
    • 1970-01-01
    • 2016-12-29
    • 2018-10-07
    相关资源
    最近更新 更多