nodejs-express、ajax发布w/jquery和接收响应
让express正确响应我的jQueryAjax请求时遇到一些问题。实际发布效果很好,但无论我怎么尝试,我似乎都无法从我的应用程序中获得我可以使用的数据响应。起初,它只是不断地发布和挂起,一分钟后,它会发出一个警报,说“XML文档已加载”(不知道它从哪里来)——不管怎样,现在它给了我 SyntaxError:意外标记非法 在解析时(本机) 在收到消息时。 在我的express应用程序中,我有:nodejs-express、ajax发布w/jquery和接收响应,jquery,ajax,node.js,express,Jquery,Ajax,Node.js,Express,让express正确响应我的jQueryAjax请求时遇到一些问题。实际发布效果很好,但无论我怎么尝试,我似乎都无法从我的应用程序中获得我可以使用的数据响应。起初,它只是不断地发布和挂起,一分钟后,它会发出一个警报,说“XML文档已加载”(不知道它从哪里来)——不管怎样,现在它给了我 SyntaxError:意外标记非法 在解析时(本机) 在收到消息时。 在我的express应用程序中,我有: app.post('/save', function(req, res) { co
app.post('/save', function(req, res) {
console.log(req.body.objectData);
res.contentType('json');
res.send({ some: 'json' });
});
在我的jquery中:
$.ajax({
url: "/save",
type: "POST",
dataType: "json",
data: {objectData: someObject},
contentType: "application/json",
cache: false,
timeout: 5000,
complete: function() {
//called when complete
console.log('process complete');
},
success: function(data) {
console.log(data);
console.log('process sucess');
},
error: function() {
console.log('process error');
},
});
您发送的不是有效的JSON响应,而是包含单词
JSON
的字符串,因此JSON.parse()
在客户端失败。试试这个:
app.post('/save', function(req, res) {
console.log(req.body.objectData);
res.contentType('json');
res.send({ some: JSON.stringify({response:'json'}) });
});
是一种以对象格式在应用程序之间共享数据的方法。但是,如果不先将对象转换为字符串并作为单个变量发送,则无法通过HTTP请求发送对象。函数
JSON.parse()
和JSON.stringify()
为我们完成了这一任务。因为您使用的是express
res.contentType('json');
应该是:
res.type('json');
但是设置类型不是必需的,因为它是自动为您完成的
看
还要注意,对于express,res.send({blah:gee})代码>在内部使用json.stringify自动转换json对象。单击上面的链接后,单击res.send
,并在执行此操作时单击res.json
,这样在您知道正在发送json时可以节省一点处理器开销。请注意,如果发送JSON,类型将自动设置为JSON
总是最好看的!请注意,res.send在检测到json时会调用this.json,res.json会调用this.send(是的,看起来像是一个循环,但一切正常)。Pastor Bones的评论对我特别重要,因为我使用$.ajax发布到节点服务器。我的代码相关部分的结尾如下:
// Incoming parameter "teams" is an array of objects
function saveTeams(teams) {
var xhr;
var data = JSON.stringify({ teams: teams });
xhr = $.ajax({
type: "POST",
url: "http://localhost:8000/saveteam",
contentType: "application/json",
data: data,
headers: {
Authorization: "..."
}
});
return xhr;
}
saveTeams: function (req, res, next) {
var teams = req.body.teams;
if (teams.length > 0) {
console.log("Teams to be added:");
for (var i = 0; i < teams.length; i++) {
console.log(teams[i]);
// ...
}
}
// ...
}
请注意,contentType头与解析工作相关
在节点服务器端,我可以这样处理负载:
// Incoming parameter "teams" is an array of objects
function saveTeams(teams) {
var xhr;
var data = JSON.stringify({ teams: teams });
xhr = $.ajax({
type: "POST",
url: "http://localhost:8000/saveteam",
contentType: "application/json",
data: data,
headers: {
Authorization: "..."
}
});
return xhr;
}
saveTeams: function (req, res, next) {
var teams = req.body.teams;
if (teams.length > 0) {
console.log("Teams to be added:");
for (var i = 0; i < teams.length; i++) {
console.log(teams[i]);
// ...
}
}
// ...
}
saveTeams:函数(请求、恢复、下一步){
var团队=需求主体团队;
如果(团队长度>0){
console.log(“要添加的团队:”);
对于(var i=0;i
标记不适用于node.js您可以打开chrome调试器检查器并查看请求正文的JSON内容吗?您看到的错误是服务器端JSON解析阻塞了请求正文中的JSON内容。这是由express.bodyParser()处理的。可能会将您的请求内容发布给其他人进行检查。您可能还想暂时停止使用express.bodyParser(),以便通过查看原始请求正文更容易手动调试您的问题。我正在尝试使用类似的技术进行此修复,但我无法让'req.body.objectData返回错误以外的任何内容。你是否正在使用另一个模块,或者你知道为什么这个模块不起作用吗?这很有用。对我来说,在我点击提交后,我在页面上得到了JSON,但没有HTML。但是当我使用stringify
时,我在AJAX中获得了成功函数的HTML和数据。谢谢你的解释。我不认为这会有帮助,但我尝试了一下,似乎没有达到预期的效果。你是如何使用saveTeams的?请求发布('/blabla',存储团队)?