我正在尝试为学校项目建立一个网站。我设置了所有内容,但我得到了错误" Data.map不是函数"。 实际上,我不是专家,我只是想了解和复制老师给我们的代码(我们在node.js中几乎没有做任何事情)。
我使用node.js
构建了服务器const express = require("express");
const app = express();
const process = require("process");
const bodyParser = require("body-parser");
let serverPort = process.env.PORT || 5000;
app.use(express.static(__dirname + "/public"));
app.set("port", serverPort);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/doctors', function(req,res){
var config = require('./doctor.json');
res.send(JSON.stringify(config));
})
/* Start the server on port 3000 */
app.listen(serverPort, function() {
console.log(`Your app is ready at port ${serverPort}`);
});
当我连接到医生页面时,我加载了所有医生的JSON文件,然后将其发送回客户端。这是JSON
[{
"id": 0,
"born": 2010,
"tag": "cat",
"name": "Eleanore"
}, {
"id": 1,
"born": 2010,
"tag": "dog",
"name": "Katelin"
}, {
"id": 2,
"born": 2012,
"tag": "dog",
"name": "Shea"
}, {
"id": 3,
"born": 2011,
"tag": "cat",
"name": "Stephen"
}, {
"id": 4,
"born": 2011,
"tag": "cat",
"name": "Rosanne"
}, {
"id": 5,
"born": 2011,
"tag": "cat",
"name": "Alexa"
}
]
然后我加载JSON,我想创建动态项目。这是我的客户端代码:
$.get('/doctors', function (data) {
$("<div class='row' id='dottori' ></div>").appendTo(".team");
data.map(addElement);
});
function addElement(doctor){
console.log("Adding doctor");
$("#dottori").append('<p> '+doctor.name+'</p>');
我一直收到这个错误,即使我将json文件字符串化(与我教授的相同),你可以在这里找到原始代码:https://bitbucket.org/polimi-hyp-2017-10173412/polimi-hyp-2018-project/src/master/
答案 0 :(得分:1)
$.ajax()
收到的数据及其任何包装方法都会以文字形式收到回复。如果要将此响应作为从json解析的对象进行处理,则必须执行以下操作之一。
var stuff = JSON.parse(data);
您可以自己手动解析它。
$.ajax({ url: ..., contentType: 'json' })
为contentType
参数提供值json
将告诉jQuery响应应该是json,并且应该在将其提供给回调之前自动解析它。
这是通过在响应上设置Content-Type: application/json
来完成的。当jQuery获得响应时,它将检查此标头以尝试智能地猜测响应是什么并处理它。
根据此堆栈溢出帖子Proper way to return JSON using node or Express,您可以在节点中执行此操作...
res.setHeader('Content-Type', 'application/json');
答案 1 :(得分:1)
要映射json 对象 ... data
必须是对象...不是字符串。
它是作为字符串收到的......所以你只需将其解析为一个对象。
在这里,它与.map()
方法链接在一起:
JSON.parse(data).map(addElement);
但你可以做(同样的事情):
var dataObj = JSON.parse(data);
dataObj.map(addElement);
记住检查变量类型的有用技巧,由taplar提及:
console.log(typeof(variable-to-check));
typeof()
是一个很好的调试技巧......有时需要在某些条件下使用它来避免错误(例如,如果脚本使用不同的源)。
)