document.getElementById.innerHTML 不适用于 ejs-javascript
document.getElementById.innerHTML not working for ejs-javascript
我目前正在使用 Express.js 和 Windows 中带有 javascript 的 ejs 开发我们的实验室主页 10。Web 浏览器是 Google Chrome, IDE 是网络风暴。
但是周围有一些错误。
现在我正在尝试显示 2 列图像的内容,但它没有出现在页面上。
我怀疑我的代码存在关于 document.getElementById.innerHTML 的问题。
我在这里查找所有答案,但没有我想要的确切答案。
我尝试了所有方法,包括将 "script" 部分移动到 "body" 的最后部分。
我怀疑document.getElementById.innerHTML的原因是
First 当我将 img src 的某些部分插入到 ejs 文件时,它工作得很好
第二个 当我在 google chrome 中检查开发人员控制台时,没有我期望的部分(div 和 img src 部分)
Third 在IDE console 中,JavaScript 文件没有报错,具有向ejs 注入html 代码的功能。
我真的很想知道为什么会这样。我想弄清楚好几天了。
p.s。因为我不会说英语,所以表达上可能有些歧义。请告诉我。
这是我的代码
index.js
var express = require('express');
var mysql = require('mysql');
var app = express();
var connection = mysql.createConnection({
host:'bisltest.kaist.ac.kr',
port:3306,
user:'root',
password:'bisl2016bsrc1',
database:'BISL_homepage'
});
connection.connect(function(err){
if (err){
console.error('mysql connection error');
console.error(err);
throw err;
}
});
app.use(express.static(__dirname + '/public'))
.
.
//some stuff
.
.
router.get('/album',function(req,res,next) {
var query = connection.query("select image_link from album", function (err, result, fields) {
if (err) {
throw err;
}
res.render('album.ejs', {
title: 'Express',
results:result
});
});
})
album.ejs
<!DOCTYPE html>
<!-- === BEGIN HEADER ===-->
<!--if IE 8html.ie8(lang='en')
-->
<!--if IE 9html.ie9(lang='en')
-->
<!-- [if !IE] <!-->
<html lang="en">
<!-- <![endif]-->
<head>
<title>Habitat - A Professional Bootstrap Template</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta name="description" content=""/>
<meta name="author" content=""/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<link href="favicon.ico" rel="shortcut icon"/>
<link rel="stylesheet" href="stylesheets/bootstrap.css"/>
<link rel="stylesheet" href="stylesheets/animate.css"/>
<link rel="stylesheet" href="stylesheets/font-awesome.css"/>
<link rel="stylesheet" href="stylesheets/nexus.css"/>
<link rel="stylesheet" href="stylesheets/responsive.css"/>
<link rel="stylesheet" href="stylesheets/custom.css"/>
<link href="http://fonts.googleapis.com/css?family=Roboto+Condensed:400,300" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="body-bg">
<div id="header">
<div class="container">
<div class="row">
<div class="logo"><a href="home" title=""><img src="images/BISL_logo.png" alt="Logo"/></a></div>
</div>
</div>
</div>
<div id="hornav" class="bottom-border-shadow">
<div class="container no-padding border-bottom">
<div class="row">
<div class="col-md-10 no-padding">
<div class="visible-lg">
<ul id="hornavmenu" class="nav navbar-nav">
<li><a href="home" class="fa-home active">Home</a></li>
<li><a href="Professor" class="fa-user">Professor</a></li>
<li><a href="Research" class="fa-copy">Research</a></li>
<li><a href="Publication" class="fa-copy">Publication</a></li>
<li><a href="Patent" class="fa-copy">Patent</a></li>
<li><a href="Member" class="fa-users">Member</a></li>
<li><a href="album" class="fa-camera">Album</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div class="container background-white">
<div class="row margin-vert-30">
<div class="col-md-12">
<h2>BISL Album</h2>
</div>
</div>
<div class="row">
<div id="album" class="col-md-12 portfolio-group no-padding">
</div>
</div>
</div>
</div>
.
.
//some stuff
.
.
<script type="text/javascript" src="javascripts/ejs_edit.js" charset="utf-8"></script>
<script type="text/javascript">
var s = JSON.stringify(results)
loop_for_ejs(s)
</script>
ejs_edit.js
function loop_for_ejs(S){
for(var v in S){
var line = "";
line +='<'+'div class=\"col-md-6 portfolio-item margin-bottom-40 filer-code\">'+ '<div><a href=\"'+S[v].image_link+'\">'+'<figure><img src=\"'+S[v].image_link+'\">'+ '</figure>'+ '</a>'+ '</div>'+ '</div>';
document.getElementById('album').innerHTML+=line;
};
}
您没有告诉 ejs 将 results
渲染到 html 中,至少在您发布的代码中没有。在您的 album.ejs
文件中,更改:
var s = JSON.stringify(results);
loop_for_ejs(s);
收件人:
var s = <%- JSON.stringify(results) %>;
loop_for_ejs(s);
或:
或者,如果您已经在您尚未发布的其他部分执行此操作,则不应在调用 loop_for_ejs
之前在 results
上调用 JSON.stringify
,因为您然后将遍历字符串的字符,而不是行数组(因此 S[v].image_link
将始终计算为 undefined
)。试试这个:
loop_for_ejs(results);
我目前正在使用 Express.js 和 Windows 中带有 javascript 的 ejs 开发我们的实验室主页 10。Web 浏览器是 Google Chrome, IDE 是网络风暴。
但是周围有一些错误。
现在我正在尝试显示 2 列图像的内容,但它没有出现在页面上。
我怀疑我的代码存在关于 document.getElementById.innerHTML 的问题。
我在这里查找所有答案,但没有我想要的确切答案。
我尝试了所有方法,包括将 "script" 部分移动到 "body" 的最后部分。
我怀疑document.getElementById.innerHTML的原因是
First 当我将 img src 的某些部分插入到 ejs 文件时,它工作得很好
第二个 当我在 google chrome 中检查开发人员控制台时,没有我期望的部分(div 和 img src 部分)
Third 在IDE console 中,JavaScript 文件没有报错,具有向ejs 注入html 代码的功能。
我真的很想知道为什么会这样。我想弄清楚好几天了。
p.s。因为我不会说英语,所以表达上可能有些歧义。请告诉我。
这是我的代码
index.js
var express = require('express');
var mysql = require('mysql');
var app = express();
var connection = mysql.createConnection({
host:'bisltest.kaist.ac.kr',
port:3306,
user:'root',
password:'bisl2016bsrc1',
database:'BISL_homepage'
});
connection.connect(function(err){
if (err){
console.error('mysql connection error');
console.error(err);
throw err;
}
});
app.use(express.static(__dirname + '/public'))
.
.
//some stuff
.
.
router.get('/album',function(req,res,next) {
var query = connection.query("select image_link from album", function (err, result, fields) {
if (err) {
throw err;
}
res.render('album.ejs', {
title: 'Express',
results:result
});
});
})
album.ejs
<!DOCTYPE html>
<!-- === BEGIN HEADER ===-->
<!--if IE 8html.ie8(lang='en')
-->
<!--if IE 9html.ie9(lang='en')
-->
<!-- [if !IE] <!-->
<html lang="en">
<!-- <![endif]-->
<head>
<title>Habitat - A Professional Bootstrap Template</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta name="description" content=""/>
<meta name="author" content=""/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<link href="favicon.ico" rel="shortcut icon"/>
<link rel="stylesheet" href="stylesheets/bootstrap.css"/>
<link rel="stylesheet" href="stylesheets/animate.css"/>
<link rel="stylesheet" href="stylesheets/font-awesome.css"/>
<link rel="stylesheet" href="stylesheets/nexus.css"/>
<link rel="stylesheet" href="stylesheets/responsive.css"/>
<link rel="stylesheet" href="stylesheets/custom.css"/>
<link href="http://fonts.googleapis.com/css?family=Roboto+Condensed:400,300" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="body-bg">
<div id="header">
<div class="container">
<div class="row">
<div class="logo"><a href="home" title=""><img src="images/BISL_logo.png" alt="Logo"/></a></div>
</div>
</div>
</div>
<div id="hornav" class="bottom-border-shadow">
<div class="container no-padding border-bottom">
<div class="row">
<div class="col-md-10 no-padding">
<div class="visible-lg">
<ul id="hornavmenu" class="nav navbar-nav">
<li><a href="home" class="fa-home active">Home</a></li>
<li><a href="Professor" class="fa-user">Professor</a></li>
<li><a href="Research" class="fa-copy">Research</a></li>
<li><a href="Publication" class="fa-copy">Publication</a></li>
<li><a href="Patent" class="fa-copy">Patent</a></li>
<li><a href="Member" class="fa-users">Member</a></li>
<li><a href="album" class="fa-camera">Album</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div class="container background-white">
<div class="row margin-vert-30">
<div class="col-md-12">
<h2>BISL Album</h2>
</div>
</div>
<div class="row">
<div id="album" class="col-md-12 portfolio-group no-padding">
</div>
</div>
</div>
</div>
.
.
//some stuff
.
.
<script type="text/javascript" src="javascripts/ejs_edit.js" charset="utf-8"></script>
<script type="text/javascript">
var s = JSON.stringify(results)
loop_for_ejs(s)
</script>
ejs_edit.js
function loop_for_ejs(S){
for(var v in S){
var line = "";
line +='<'+'div class=\"col-md-6 portfolio-item margin-bottom-40 filer-code\">'+ '<div><a href=\"'+S[v].image_link+'\">'+'<figure><img src=\"'+S[v].image_link+'\">'+ '</figure>'+ '</a>'+ '</div>'+ '</div>';
document.getElementById('album').innerHTML+=line;
};
}
您没有告诉 ejs 将 results
渲染到 html 中,至少在您发布的代码中没有。在您的 album.ejs
文件中,更改:
var s = JSON.stringify(results);
loop_for_ejs(s);
收件人:
var s = <%- JSON.stringify(results) %>;
loop_for_ejs(s);
或:
或者,如果您已经在您尚未发布的其他部分执行此操作,则不应在调用 loop_for_ejs
之前在 results
上调用 JSON.stringify
,因为您然后将遍历字符串的字符,而不是行数组(因此 S[v].image_link
将始终计算为 undefined
)。试试这个:
loop_for_ejs(results);