【发布时间】:2017-04-29 05:49:12
【问题描述】:
这是一个基本问题,但它一直困扰着我一段时间,到目前为止,我在搜索中找不到任何匹配的问题。所以,如果过于简单或重复,请见谅。
我有一个 API 路由(基于 Express),我正在使用 jQuery AJAX 调用来调用这个路由。这是一个演示设置的简单存根
$.ajax({
url: "http://localhost:3000/admin/items/" + itemId,
type: "POST",
dataType: "json",
data: itemData,
contentType: "application/json",
success: function(result){alert(result);},
error: function(xhr, ajaxOptions, thrownError){
alert("Could not update item details. Please try again later. Error: " + xhr.statusText);
}
});
从服务器,我确认返回的状态码是 200,下面是实现:
collection.update({ _id : mongo.ObjectID(req.params.id) }, req.body, function(err, result) {
if(err){
console.log("Error is: " + err);
res.status(500).send("Could not update item with id: " + req.params.id);
}else {
if(result.result.n != 1){
res.status(500).send("Could not find item with id: " + req.params.id);
}
else{
console.log("Update successful");
res.status(200).send("Successfully updated item id: " + req.params.id);
}
}
});
该功能完美运行,但在调用结束时,错误函数被调用并且我收到的警报是:“无法更新项目详细信息。请稍后再试。错误:好的”。我试过了一个简单的 res.send 也没有显式设置状态代码,但不知何故它总是调用错误函数。我错过了什么?
【问题讨论】:
-
返回的数据不是JSON,去掉
dataType: 'json'这一行 -
发送的 itemData 是 JSON,因此是 dataType。我也应该返回 JSON 响应吗?该响应 JSON 是否有推荐的结构?到目前为止,我看到的所有示例都只返回字符串。
-
使用
.json代替.send,然后传递一个对象,该对象包含一个包含字符串响应的message字段和一个包含数据的data字段 -
效果很好。所以jQuery客户端期望响应是一个有效的JSON,不管状态码,如果dataType设置为JSON?
-
没错。如果它是无效的 JSON,则会引发错误。
标签: javascript jquery node.js ajax express