【问题标题】:using laravel option from javascript使用来自 javascript 的 laravel 选项
【发布时间】:2014-09-12 06:58:10
【问题描述】:

在控制器中我这样做

$actions = array('' => 'Select Action Name') + Action::lists('name' , 'id');

我想在我的 javascript 中使用 $actions 变量。

我尝试了这些方法:

<script>
var actions = {{actions}};
</script>

但我得到了这个例外

Array to string conversion

我也试过这个:

<script>
    @foreach($actions as $action)
        console.log($action);
    @endforeach
</script>

但是在控制台中我得到了这个异常

Uncaught ReferenceError: $action is not defined 

你能帮帮我吗?

【问题讨论】:

  • 我想知道你为什么不赞成这个问题。我努力解决了这个问题,我向你展示了很好的努力。
  • +1 @AnastasieLaurent 是对的。尝试失败是发布问题的一种原因。我认为她在这里表现出了真正的努力。
  • 有一个不错的包可以帮助你轻松地将数据从 Laravel 传递到 js here。看看它值得努力。您可以通过执行以下操作一次传递数据:JavaScript::put(['foo' =&gt; 'bar']); 现在,var foo = 'bar'; 可以在 script 标记内的 js 的窗口范围内访问。一个非常干净的解决方案。
  • @marios WOW 着迷......我绝对会使用它。非常感谢
  • 感谢您继续努力!

标签: javascript php jquery laravel laravel-4


【解决方案1】:

你必须用花括号来回应它:

<script>
    @foreach($actions as $id => $name)
        console.log('{{ $id }}', '{{{ $name }}}');
    @endforeach
</script>

您的另一个选择是通过将数组转换为 JSON 来使用该数组:

<script>
    var actions = {{ json_encode($actions) }};
</script>

【讨论】:

  • 非常感谢我得到了结果,但由于某些原因结果不正确。每个$actionnameid,我得到的只是name。请问我怎样才能把它们都拿走? +1
  • @AnastasieLaurent - 我展示的第二个例子应该给你你想要的。
  • 我编辑了你的一些代码,所以最终的代码是这个 ``它的工作原理:) 非常感谢我会在系统允许时接受答案
【解决方案2】:

$actions 是控制器内部的一个数组。要将其传递给视图,您可以在控制器的路由回调中执行此操作:

return View::make('someview')->with('actions', $actions);

然后您就可以从您的视图中访问$actions 变量,一个数组。

然而,Javascript 数组和 PHP 数组之间有一些很大的不同。最有可能的是,当您将 PHP 数组转换为 JavaScript 时,您最终会使用 JavaScript object,因为 javascript 中的数组不能有非数字索引。

您可能想要做的是在 PHP 中 json_encode 您的数组,然后您可以在 JavaScript 中 JSON.parse

<script>
    var actions = {{ json_encode($actions) }};
    console.log(actions);
</script>

【讨论】:

  • 为您的努力+1,但另一个答案首先帮助了我。非常感谢
  • 您只能在字符串上调用JSON.parse。放弃它,因为它不起作用,也不需要它。
  • 从手册中,这是函数描述:string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )如果你不想要JavaScript变量中的字符串,你如何获取数据?
  • @watcher 它返回一个字符串,然后您将echo直接进入页面。然后该字符串在 JS 中被解析 - 不是作为字符串 - 作为常规 JS 代码,因此它最终会自动成为一个对象。试试看,你就会明白我的意思了。
  • @Joseph Silber 明白了,现在说得通了。
猜你喜欢
  • 2013-02-25
  • 2018-06-01
  • 2021-09-11
  • 2017-07-19
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多