如何从数据库中获取值到视图文件中的javascript代码(laravel 5.2)

How to fetch a value from database to javascript code in view file (laravel 5.2)

本文关键字:代码 javascript laravel 视图 数据库 获取 文件      更新时间:2023-09-26

我想将一个变量从我的控制器文件传递到我的视图文件中的javascript代码,我在控制器中使用sql查询从数据库中提取了这个变量,它在一个变量中,我可以使用简单的laravel方法将该变量传递到视图文件,但无法在javascript代码中使用它,可能是因为它的范围。

我的视图文件:

<div id="js-example-disabled">
    <h2><code>Mood Meter..!!</code></h2>
    <input type="range" min="0" max="50" data-rangeSlider disabled>
    <output></output>
    <button data-behaviour="toggle">@if($user==Auth::user())<p>Change Mood</p>@endif</button>
</div>
<div id="j">
</div>

<script src="{{URL::asset('rangeSlider.js')}}"></script>
<script>
    (function () {
        var value;
        var selector = '[data-rangeSlider]',
                elements = document.querySelectorAll(selector);
        // Example functionality to demonstrate a value feedback
        function valueOutput(element) {
            value = element.value,
                    output = element.parentNode.getElementsByTagName('output')[0];
        }
        for (var i = elements.length - 1; i >= 0; i--) {
            valueOutput(elements[i]);
        }
        Array.prototype.slice.call(document.querySelectorAll('input[type="range"]')).forEach(function (el) {
            el.addEventListener('input', function (e) {
                valueOutput(e.target);
            }, false);
        });

        // Example functionality to demonstrate disabled functionality
        var toggleBtnDisable = document.querySelector('#js-example-disabled button[data-behaviour="toggle"]');
        toggleBtnDisable.addEventListener('click', function (e) {
            var inputRange = toggleBtnDisable.parentNode.querySelector('input[type="range"]');
            console.log(inputRange);
            if (inputRange.disabled) {
                inputRange.disabled = false;
            }
            else {
                inputRange.disabled = true;
            }
            inputRange.rangeSlider.update();
        }, false);
        rangeSlider.create(elements, {
value:10,
            // Callback function
            onInit: function () {
            },
            // Callback function
            onSlideStart: function (value) {
                console.info('onSlideStart', 'value: ' + value);
            },
            // Callback function
            onSlide: function (value) {
                console.log('onSlide', 'value: ' + value);
            },
            // Callback function
            onSlideEnd: function (value) {
                 var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('j').innerHTML=this.responseText;
    }
  };
  xmlhttp.open("GET", "/meter/"+value, true);
  xmlhttp.send();
            }
        });
    })();
</script>

我的控制器文件:

public function meter($value)
 {

    $data=user::where('id',Auth::user()->id)
    ->update(['meter'=>$value]);

  return response()->json([
    'data'=>$value
    ]);
 }

您可以在blade模板中的任何位置使用双大括号{{ }}。示例:

<script>
    var value = {{ $value }};
    alert(value); //alert is to test if it is working or not
</script>

试试这个由jaffery way@laracast开发的包,它将php-vars转换为javascript,这里是链接

https://github.com/laracasts/PHP-Vars-To-Js-Transformer

  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById('j').innerHTML=this.responseText.data;
    }

这应该可以完成