jquery ajax响应中缺少responseJSON

Posted

技术标签:

【中文标题】jquery ajax响应中缺少responseJSON【英文标题】:Missing responseJSON in jquery ajax Response 【发布时间】:2016-05-02 08:32:28 【问题描述】:

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

我有一个运行 express 的 Node 服务器,用于从 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]));

上面的代码产生一个我可以使用/打印的响应,并且包含 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 属性,或者,如果我完全错了,为什么第一个示例做。任何想法或解决方案表示赞赏,谢谢!

【问题讨论】:

您能否也发布收到的实际回复以及来自users.json 的对象。 【参考方案1】:

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

res.json(resJSN);

而不是

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

【讨论】:

这正是我在注意到此评论之前所做的。不过,我不明白为什么一个发送带有属性而另一个发送没有。

以上是关于jquery ajax响应中缺少responseJSON的主要内容,如果未能解决你的问题,请参考以下文章

CORS:响应中缺少授权标头(jQuery / Spring)

如何从 jQuery.ajax 获取响应状态码?

在 jQuery 数据表中调用 ajax 时没有得到响应

在 jQuery $.ajax 中读取 Laravel JSON 响应

ajax响应后如何在jquery中刷新表单[重复]

在jQuery ajax json响应中解析iso日期