【问题标题】:Sending a JSON encoded PHP variable to JS with Laravel 4使用 Laravel 4 将 JSON 编码的 PHP 变量发送到 JS
【发布时间】:2023-03-19 15:51:01
【问题描述】:

我在将 JSON 编码的 php 数组传递给 Laravel 4 中的 javascript 时遇到了一些问题。我将它从我的控制器发送到我的视图,在 HTML 中填充一个值字段,然后用 JS 提取该值。代码如下:

控制器:

$artist_likes_profile = Fanartist::profile_fan_likes(Auth::user()->get()->id);
$artist_likes = json_encode(array("name"=>$artist_likes_profile));

return View::make('artists.show', compact('artist'))
       ->with('artist_likes', $artist_likes);

HTML:

<input type="hidden" id="js-helper-artist-likes" name="js-helper-artist-likes" value="<? php echo $artist_likes ?>">

JS:

var artist_likes = $('#js-helper-artist-likes').val();
console.log(artist_likes);

但是,运行它,我只看到控制台中的 artist_likes 变量显示为"{",而不是实际的 json 字符串。

当我添加这两行时(尝试解码 js 中的 json 变量):

var artist_likes_decoded = $.parseJSON(artist_likes);
console.log(artist_likes_decoded);

我得到错误:

Uncaught SyntaxError: Unexpected end of input

我知道 JSON 字符串正在填充 value 字段,因为我在页面源中看到了这一点:

   <input type="hidden" id="js-helper-artist-likes" name="js-helper-artist-likes" value="{"name":[{"id":215,"fbid":"19538277626","stage_name":"311","city":"","state":"","image_path":"http:\/\/graph.facebook.com\/19538277626\/picture?width=720&height=720",
"description":"311 was formed in 1990 in Omaha, Nebraska."},{"id":18,"fbid":"14591271531","stage_name":"Beck","city":"","state":"","image_path":"https:\/\/graph.facebook.com\/14591271531\/picture?width=720&height=720",
"description":""},{"id":47,"fbid":"137029526330648","stage_name":"Disclosure","city":"","state":"","image_path":"https:\/\/graph.facebook.com\/137029526330648\/picture?width=720&height=720","description":""},
{"id":11,"fbid":"152513780224","stage_name":"Arcade Fire","city":"","state":"","image_path":"https:\/\/graph.facebook.com\/152513780224\/picture?width=720&height=720","description":""}]}">

任何想法我做错了什么?谢谢。

【问题讨论】:

  • 可以看到value属性又马上关闭了value="{"
  • ?这是什么意思?

标签: javascript php jquery json laravel-4


【解决方案1】:

这是因为 JSON 字符串包含配额 (") 并且会破坏 html 解析。您需要先转义这些。

<?php echo str_replace('"', '\"', $artist_likes) ?>

如果此隐藏输入只是为了使值可用于 js,则替代解决方案是将 JSON 直接传递给 js 变量。

var artists_likes_decoded = <?php echo $artist_likes ?>

【讨论】:

  • 我应该提到应该避免将数据直接传递给 js,因为可能存在安全漏洞和代码混乱,但有时这是不可避免的 :)
  • 正是我试图通过这样做来避免的
  • 有没有办法不破坏 HTML 解析,让 JS 得到字面值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2013-11-02
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多