Laravel blade pass Javascript variable in php


Laravel blade pass Javascript variable in php

如何在php循环中将javascript变量作为变量传递:

像这样的东西(显然不起作用):

        var myJsVar = 100;
        @for ($i = 0; $i<myJsVar; $i++)
            ... some code
        @endfor

此外,我尝试使用 ajax 解决此问题:

        /**
         *  Get slider value
         */
        $.ajax({
            type: 'GET',
            url: myUrl,
            data: myJsVar,
            success: function (option) {
                console.log(myJsVar);
            }
        });

它返回给我成功函数,

此外,我在控制器中执行此操作:

public function prod(Request $request)
{
    if ($request->ajax()) {
        $ajax = "AJAX";
        dd($ajax);
    } else {
        $ajaxN = "NO Ajax";
        dd($ajaxN);
    }
}

它没有用。

我不确定如何进行,希望得到一些帮助。

PHP

甚至在页面到达浏览器之前就已经完成了它的工作,因此将变量从 Javascript 传递给 PHP 而不执行另一个请求是不可能的。考虑

A)将循环移动到Javascript。考虑使用一些UI库,如Vue.js,Angular或React。

B)myJsVar的内容移动到 PHP。如果它取决于用户输入或浏览器渲染,那是不可能的。

C) 通过 Ajax 请求执行渲染逻辑

$.ajax({
            type: 'GET',
            url: myUrl,
            headers: {'X-Requested-With': 'XMLHttpRequest'},
            data: {value: myJsVar},
            success: function (response) {
                $(someContainer).html(response);
            }
        });

在控制器中:

public function prod()
{
   $value =  Request::get('value');
   return view('view-with-a-loop')->with('value', $value);
}

小心后一种方法 XSS。

我在刀片中使用一个部分来添加 javascript,然后将其拉入布局中。下面的示例显示了整数/字符串/模型集合的传递,例如:

刀片模板

@extends('layouts.app')
@section('javascript')
<script type="text/javascript">
    var myInteger = {!! $myInteger !!};
    var myString = '{!! $myInteger !!}';
    var myObject = {!! json_encode($models) !!};
</script>
@endsection
@section('content')
...
@endsection

布局(javascript 可以放在布局中的任何位置,即头部或身体:

<!DOCTYPE html>
<html>
<body>
    @yield('content')
    @yield('javascript')
</body>
</html>
一种方法

是将值呈现为meta标签,如下所示:

<meta name="myJsVar" content="100">

然后使用 JavaScript 通过 DOM 读取该值:

var myJsVar = parseInt(document.querySelector("meta[name=myJsVar]").content);