jquery ajax 响应中缺少响应 JSON

Missing responseJSON in jquery ajax Response

本文关键字:响应 JSON ajax jquery      更新时间:2023-09-26

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

我有一个运行 Express 的节点服务器,用于从 JSON 文件提供本地主机数据。不是最好的数据库,但由于它是一个单一用户系统(任何时候只有一个参与者会使用该系统),添加任何其他技术真的没有意义。以下获取请求代码工作正常:

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]));
}

上面的代码生成了一个我可以使用/打印的响应,并包含响应 JSON 属性。下面的代码没有,我会注意到节点代码在同一个服务器.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 属性,或者,如果我完全错了,为什么第一个示例包含。任何想法或解决方案表示赞赏,谢谢!

而不是手动设置 application/json 标头并发送response只需使用

res.json(resJSN);

而不是

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