簡體   English   中英

在Laravel Blade Template中使用JavaScript將PHP變量與HTML存儲在一起

[英]Store PHP variable with HTML in JavaScript in Laravel Blade Template

我需要一種方法來存儲JavaScript中PHP變量的HTML。

var contents = "{{ $template }}";

然而,這會產生錯誤。 我想這是因為它沒有正確轉義,所以它弄亂了網絡瀏覽器,因為JS無法正確存儲...我已經嘗試過Laravel轉義

var contents = "{{ e($template) }}";

沒有任何成功。

最終目標是: $('#preview-iframe').contents().find('html').html(contents);

我怎么能做到這一點?

雙花括號{{ }}將始終將特殊字符轉換為HTML實體。 嘗試使用{!! !!} {!! !!}完全呈現代碼。 但是,您需要確保轉義字符串中的雙引號。

所以這:

var contents = "{{ $template }}";

應該是這樣的:

var contents = "{!! addcslashes($template, '"') !!}";

我使用此解決方法來解決同樣的問題

var contents = atob("{{ base64_encode($contents) }}");

這非常方便,因為您不必轉義任何字符,並且您可以保證javascript不會出現任何語法錯誤。

一個缺點是IE10和up- source支持atob()函數

您可以將PHP變量值帶到java腳本中,如下所示

<script>
   var jsvariable = <? echo $phpvarialbe ?>;
   console.log(jsvariable)
</script>

你可以嘗試var contents = {{$template->toJSON()}};

我遇到了非常相似的問題。 問題是,如果你使用

var contents = "{{ e($template) }}";

在你的javascript中,解析器認為{{e($ template)}}是javascript對象,而不是你的刀片變量。 腳本塊中的括號不被視為刀片變量,而是作為JSON格式的對象。

我的解決方案是,我制作了一個模板並將其包含在像這樣的刀片變量的位置

var contents = '@include("public.default.values.content")';

然后我在文件夾(你的視圖文件夾)/public/default/values/content.blade.php中創建了文件,並在此模板文件中只添加了一行,你的值

{{ e($template) }}

javascript塊內的刀片解析器正確理解了包含。 這樣刀片解析器將正確使用您的包含在JavaScript代碼中,正確轉到內容刀片,獲取值並將其保存在您的javascript變量中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM