将数据从Controller传递给JavaScript

时间:2015-08-13 10:43:26

标签: javascript php html laravel

我想将数据从我的Controller传递到处理Google条形图的JavaScript。

作曲家

$tmp = 6;
return view('pages.template', ['tmp' => $tmp]);

来自我的template.blade.php我称之为谷歌图表

<div id="chart_div"></div>

.js文件:

var tmp = 6;
var tmp2 = parseInt('{!! $tmp !!}');

var data = google.visualization.arrayToDataTable([
    ['comment1', 'comment2'],
    ["- 6 days", tmp],
    ["- 5 days", tmp2],
    ["- 4 days", 31],
    ["- 3 days", 12],
    ["- 2 days", 10],
    ["- 1 day", 3],
    ["today", 4]

Google-Bar-Chart的第二个栏是空白的.... enter image description here

但是应该显示我的变量。

如何解决此问题?

4 个答案:

答案 0 :(得分:2)

只需替换:

tempObject["data"] = tempDataArray;
dataArray.push(tempObject);
});

通过:

var tmp2 = parseInt('{!! $tmp !!}');

它应该有用。

答案 1 :(得分:0)

您正尝试在 JS 文件中使用 Blade 语法。为了使其工作,此文件需要由Blade编译器处理。这意味着您不需要直接在您的网站中包含JS文件,而是需要包含一个将由Laravel处理并输出Javascript代码的URL。这是可能的,但它通常是一个糟糕的选择。而不是直接从服务器获取轻量级JS文件,Laravel需要处理附加请求

您需要做的是:

  1. 将您的Javascript放入Blade模板
  2. 创建

    的控制器操作
    class JavascriptController extends Controller {
      public function javascript() {
        $tmp = 6;
        return view('javascript', ['tmp' => $tmp]);
      }
    }
    
  3. routes.php

    中添加指向该操作的路线
    Route::get('/javascript', 'JavascriptController@javascript');
    
  4. 不包括原始Javascript文件,而是包含将执行此控制器操作的URL

    <script src="{{route(javascript)}}"></script>
    

答案 2 :(得分:0)

这对我有用

<script type="text/javascript">

var tmp = {!! json_encode($tmp->toArray()) !!};
console.log(tmp);

</script>

在您的控制器中,您可以执行以下操作

public function index()

{

$tmp = Tmp::get();

return view('tmp.index', compact('tmp'));

}

答案 3 :(得分:-1)

变量$tmp似乎未在.js文件中成功解析。为什么不将.js文件中的代码放入template.blade.php