2

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データ呼び出しを行う必要があります。他に方法はありませんか?

4

2 に答える 2

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 テンプレート内で、チャネルをページに直接レンダリングする必要があります。

于 2012-11-15T16:08:19.773 に答える
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);
    });
  }
});
于 2012-11-15T16:11:31.360 に答える