如何从 Node.js 中的 ajax 帖子返回成功
Posted
技术标签:
【中文标题】如何从 Node.js 中的 ajax 帖子返回成功【英文标题】:How to return success from ajax post in Node.js 【发布时间】:2014-05-14 06:49:11 【问题描述】:我有这样的功能:
exports.saveAction = function (req, res)
var conn = mysql.createConnection(
host : nconf.get("database:host"),
//port: 3306,
user : nconf.get("database:username"),
password : nconf.get("database:password"),
database : nconf.get("database:database"),
multipleStatements: true,
//ssl: 'Amazon RDS'
);
var action = req.body;
conn.query('UPDATE actions SET ? WHERE Id = ?',
[action, action.Id], function (err, result)
conn.end();
if (err) throw err;
res.writeHead(200, "Content-Type": "application/json" );
res.end("Updated Successfully");
);
;
我返回“200”,但它总是在如下所示的错误子句中返回:
$.ajax(
url: "/api/action/SaveAction",
type: "PUT",
data: ko.toJSON(self.stripDownObj()),
datatype: "json",
contentType: "application/json; charset=utf-8",
success: function (result)
console.log(result);
if(result.status == 200)
self.isEditMode(!self.isEditMode());
,
error: function(result)
console.log(result);
);
注意:sql查询成功并保存数据。
【问题讨论】:
随便res.send(result:"success")
nodejsreactions.tumblr.com/post/78336069976/if-err-throw-err
【参考方案1】:
在您期待 JSON 时返回 JSON
res.end('"success" : "Updated Successfully", "status" : 200');
然后
$.ajax(
....
datatype: "json", // expecting JSON to be returned
success: function (result)
console.log(result);
if(result.status == 200)
self.isEditMode(!self.isEditMode());
,
error: function(result)
console.log(result);
);
在 Node 中,您始终可以使用 JSON.stringify 来获取有效的 JSON
var response =
status : 200,
success : 'Updated Successfully'
res.end(JSON.stringify(response));
Express也支持做
res.json(success : "Updated Successfully", status : 200);
它将对象转换为 JSON 并自动为您传递适当的标头。
【讨论】:
@cookiemonster - 重要的是,如果它不是有效的 JSON,jQuery 在尝试解析它时会抛出一个解析错误。 这有关系吗?我不确定用简单的字符串响应会破坏任何东西。 ...抱歉,更新了我的评论,但您基本上已经回复了新评论。我错过了发送的不是完整的字符串语法,这也不是真正有效的,除了 JS 解析器似乎允许它。 +1 @cookiemonster - 是的,JSON 响应并没有真正的状态属性,所以必须手动添加,JSON 仅对双引号等有效。 @adeneo - 如果我想在成功的结果后在帖子中执行 res.redirect() 怎么办?以上是关于如何从 Node.js 中的 ajax 帖子返回成功的主要内容,如果未能解决你的问题,请参考以下文章
我们如何将字符串从回调函数返回到 node.js 中的根函数?