如何使用yii使用数据库中的值初始化javascript数组?

时间:2017-07-17 21:57:09

标签: javascript arrays yii2

我必须创建一个javascript数组,其元素是硬编码的,但我想从数据库中获取它们的元素。可能吗?如果是这样,怎么样? 这是我的代码

public class HttpClientAccessor : IHttpClientAccessor {
    static readonly Lazy<HttpClient> client = new Lazy<HttpClient>(() => new HttpClient());
    public HttpClient HttpClient { get { return client.Value; } }
}

2 个答案:

答案 0 :(得分:0)

假设您已将图像路径保存在数据库的字段中,则需要先将它们写入DOM,然后才能访问它们。这可以通过回显变量到页面本身来完成。如果您不希望访问者看到这些文件路径,您可以使用CSS 隐藏它们。

<?php

$image_paths = []; // An array containing your image paths, retrieved from the database

echo "<div id='images'>";
foreach($image_paths as $image_path) {
  echo "<div>" . $image_path . "</div>";
}
echo "</div>";

?>

这会给你:

<div id="images">
  <div>../Images/stu_9.png</div>
  <div>../Images/stu_10.png</div>
  <div>../Images/stu_11.png</div>
</div>

等等。

然后您可以隐藏它,因此它不会显示给访问者,但在DOM中仍然可见:

#images {
  display: none;
}

然后,您可以使用JavaScript 定位这个不可见的DOM:

var images_array = [];
var images = document.getElementById('images');

for (var i = 0; i < images.children.length; i++) {
  images_array.push(images.children[i].innerHTML);
}

console.log(images_array);
#images {
  display: none;
}
<div id="images">
  <div>../Images/stu_9.png</div>
  <div>../Images/stu_10.png</div>
  <div>../Images/stu_11.png</div>
</div>

另请注意,在上面的代码中,您有重复的ID,这是无效的标记。此外,您不应该使用单词array作为变量名称,因为它与名称Array是连续的。在我的示例中,我已将其替换为images_array

希望这有帮助! :)

答案 1 :(得分:0)

You can use client side script for this.Follow below steps
  1. Get an array of images path from database in controller action.
  2 Render this array on view part.
  3. Write client side script in your view file i.e. $this->registerJs("script code here");

以下是您的视图文件的完整代码:

<?php
$this->registerJs('var container = document.getElementById("wrapper");
var array = '.$arr_Images_From_controller.';
for( i=0; i<array.length; i++){
container.insertAdjacentHTML("beforeend", "<img src="/'+array[i]+/'">");
}');
?>