在jquery ajax响应中缺lessresponseJSON

我正在开发一个小型Web框架来运行一个HCI研究,并遇到了以下问题:

我有一个运行express的节点服务器来从JSON文件服务我的本地主机数据。 不是最好的分贝,但由于它是一个单一的用户系统(只有一个参与者将在任何时候使用该系统),添加任何其他技术是没有意义的。 下面的Get请求代码工作得很好:

function getUser(id,last) { return $.ajax({ type: "GET", url: "/data/user/"+id, async: false }).responseJSON; } 

由以下节点代码处理:

 app.get('/data/:asset/:id', function (req, res) { var accJSN res.setHeader('Content-Type', 'application/json'); if(req.params.asset === "user") { accJSN = JSON.parse(fs.readFileSync(path.join(__dirname,'/public/data/users.json'))); res.send(JSON.stringify(accJSN.users[req.params.id])); } 

上面的代码生成一个响应,我可以使用/ print并包含responseJSON属性。 下面的代码不会,我会注意到节点代码是在同一个server.js文件和jquery / ajax调用函数是在我的客户端页面:

客户端代码:

 function getUserset(ids,last) { userQuery = ""; for(i=0;i<ids.length;i++) { userQuery += ids[i] + ","; } userQuery = userQuery.slice(0,-1); return $.ajax({ type: "GET", url: "/userset?users=["+userQuery+"]", async: false }).responseJSON; } 

服务器代码:

 app.get('/userset', function (req, res) { var accJSN = JSON.parse(fs.readFileSync(path.join(__dirname,'/public/data/users.json'))); accJSN = accJSN.users; var users = JSON.parse(req.query.users); var resJSN = new Array; for(var i=0;i<users.length;i++) { var temp = {}; temp["id"] = users[i]; temp["fName"] = accJSN[users[i]].fName; temp["lName"] = accJSN[users[i]].lName; temp["profilePic"] = accJSN[users[i]].profilePic; resJSN.push(temp); } res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(resJSN)); }) 

我需要的数据实际上在响应文本中是可用的,但我不能为了我的生活找出为什么第二个例子不包括responseJSON属性,或者如果我完全错了,为什么第一个例子。 任何想法或解决scheme赞赏,谢谢!

而不是手动设置application/json头和发送一个response只是使用

 res.json(resJSN); 

代替

 res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(resJSN));