簡體   English   中英

傳遞和使用從 json 到 javascript 的數據

[英]Pass and use data from json to javascript

我有一個 javascript function,我正在 php 頁面中調用。 我還向這個 function 添加了一個 json 方法,它從數據庫中提取數據。 這是它的樣子:

$this->registerJsFile('/js/restaurant-reserve.js', ['depends' => [JqueryAsset::class]]);
$this->registerJs('restaurantReserve.init('. Json::encode($restaurant->workHours) .')');

結果,在頁面末尾,我得到了以下形式的數據:

restaurantReserve.init([{"id":86,"restaurant_id":1,"day":"Mon","open":"9.30","close":"14.30","created_at":"2022-02-22 10:56:15"}])

但是我想在restaurantReserve function 所在的 javascript 文件本身中使用此數據。

因為現在我必須手動完成:

let json = [{"id":86,"restaurant_id":1,"day":"Mon","open":"9.30","close":"14.30","created_at":"2022-02-22 10:56:15"}]

怎么才能讓json的數據到javascript來使用呢? 不要手寫。

更新

我想到了一個答案,就是添加這一行,它將全局聲明這個變量:

$this->registerJs('let json = '. Json::encode($restaurant->workHours) .';');

但是發現這個變量是在執行這個restaurant-reserve.js文件的腳本之后才聲明的,這個文件使用了這個變量,有點不懂怎么弄高。

這是我在 php 文件中的最終代碼:

$this->registerJs('let json = '. Json::encode($restaurant->workHours) .';');
$this->registerJsFile('/js/restaurant-reserve.js', ['depends' => [JqueryAsset::class]]);
$this->registerJs('restaurantReserve.init()');

我在頁面上得到的結果首先是文件,然后是這個變量:

<script src="/js/restaurant-detail.js"></script>
<script src="/js/share.js"></script>
<script>jQuery(function ($) { 
let json = [{"id"...}]
</script>

可以做什么??

您可以在代碼中添加以下行

$this->registerJs('let json = '. Json::encode($restaurant->workHours) .';');

在閱讀您的評論和進一步的查詢后更新答案。

您可以將第二個參數傳遞給 registerJs function。View View::POS_READY or View::POS_BEGIN

喜歡:

$this->registerJs('let json = '. Json::encode($restaurant->workHours) .';', View::POS_READY);

registerJs中的第二個參數與此問題有關。
也就是說,第二個參數決定腳本應該插入頁面的哪個 position 處。 可能的值是:

View::POS_HEAD  for head section.
View::POS_BEGIN  for right after opening <body>.
View::POS_END  for right before closing </body>.
View::POS_READY  for executing code on the document ready event. This will automatically register jQuery and wrap the code into the appropriate jQuery code. This is the default position.
View::POS_LOAD  for executing code on the document load event. Same as the above, this will also register jQuery automatically.

第一個參數是我們要插入到頁面中的實際 JS 代碼。 它將被包裝到一個標簽中。 第二個參數確定腳本應該插入頁面的哪個 position 處。

對於 scriptFiles,您還可以指定加載它的位置和時間。 根據依賴關系和....
最好參考此鏈接

暫無
暫無

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

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