我从json文件获取json数据时遇到一些问题,首先是错误:
"NetworkError: 404 Not Found - http://localhost:8000/channels.json"
以下是在我的html文件中获取json数据的代码:
<div id="result"></div>
<script type="text/javascript">
// read episodes in channel
function ajaxRequest(){
if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest();
else
return false;
}
var mygetrequest=new ajaxRequest();
mygetrequest.onreadystatechange=function(){
if (mygetrequest.readyState==4){
if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
var jsondata=eval("("+mygetrequest.responseText+")"); //retrieve result as an JavaScript object
var rssentries=jsondata.channels;
var output='<ul>';
for (var i=0; i<rssentries.length; i++){
output+='<li>';
output+=rssentries[i].channel_id+'</a><br>';
output+='<a href="multiroom.html">'+rssentries[i].name+'</a>';
output+='</li>';
}
output+='</ul>';
document.getElementById("result").innerHTML=output;
}else{
alert("An error has occured making the request");
}
}
}
mygetrequest.open("GET", "channels.json", true);
mygetrequest.send(null);
</script>
所以html单独工作,但当我尝试在我的节点服务器中渲染它时,我得到错误,代码在我的节点服务器中表达:
var express = require('express');
var http = require('http');
var app = express();
var server = module.exports = http.createServer(app);
server.listen(8000);
console.log("Express server listening on port 8000 in %s mode");
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
app.get('/episodes', function(req, res){
res.render('episodes.html');
});
所以我必须在服务器中进行json数据调用以避免错误,没有别的办法吗?
答案 0 :(得分:2)
如果您在服务器上呈现,则无法使用Ajax。 Ajax只能在浏览器中运行,而不是在服务器上运行。在服务器上,您必须直接读取文件,将其传递给渲染器,并在模板内部渲染它。例如:
var fs = require('fs');
app.get('/episodes', function(req, res){
fs.readFile('./public/channels.json', 'utf8', function (err, data) {
var channels = JSON.parse(data);
res.render('episodes.html', channels);
});
});
在您的ejs模板中,您必须直接将频道渲染到页面中。
答案 1 :(得分:0)
与Max建议的另一个选择是使用res.format()返回所需的特定内容类型。
http://expressjs.com/api.html#res.format
res.format({
text: function(){
res.send(...);
},
html: function(){
res.send(...);
},
json: function(){
fs.readFile('./public/channels.json', 'utf8', function (err, data) {
var channels = JSON.parse(data);
res.send(channels);
});
}
});