繁体   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