【发布时间】:2016-03-01 11:49:29
【问题描述】:
这是我在 SO 和 Google 上经常看到的一个问题,但找不到适合我的案例的实际解决方案,我自己也无法解决。
我正在将数据从 javascript 应用程序发送到 Node js 服务器,用于查询数据库。
通话数据:
var cDate = new Date();
var name = "get";
var method = "POST";
var data = {
"db": "alerts",
"params": {
"selector":{
"$or": [
{
"expires.year":{
"$gt": cDate.getFullYear()
}
},
{
"expires.year":{
"$eq": cDate.getFullYear()
},
"expires.month":{
"$gt": (cDate.getMonth()+1)
}
},
{
"expires.year":{
"$eq": cDate.getFullYear()
},
"expires.month":{
"$eq": (cDate.getMonth()+1)
},
"expires.day":{
"$gte": cDate.getDate()
}
}
]
},
"sort":["created.year:number","created.month:number","created.day:number"]
}
};
实际调用:
var jqXHR = $.ajax({
url:baseURL+"/"+name,
dataType:"json",
crossDomain:true,
data:data,
method:method,
success: function(data,status,xhr){
busyIndicator.hide();
console.log("success, status: "+status);
console.log("--> RESPONSE: "+JSON.stringify(data));
if (callbackSuccess!="") window[callbackSuccess](data);
},
error:function(xhr,status,err){
busyIndicator.hide();
console.log("error, status: "+status);
console.log(err);
genericFailure("Errore nella chiamata al service: "+err);
}
});
一切正常(.ajax 自己“字符串化”我的 JSON 数据)除了日期也被转换为字符串的事实,因此我的后续数据库查询失败(因为数据库试图面对一个字符串与一个数字)。 我已经尝试发送了
parseInt(<value I want to stay a number>)
但当然它不起作用,因为内容稍后会被字符串化。
Here 我读到不可能将数字作为数字发送,我需要在服务器端进行转换,但问题是如果我通过 Postman 进行相同的调用
{
"db": "alerts",
"params": {
"selector":{
"$or": [
{
"expires.year":{
"$gt": 2016
}
},
{
"expires.year":{
"$eq": 2016
},
"expires.month":{
"$gt": 2
}
},
{
"expires.year":{
"$eq": 2016
},
"expires.month":{
"$eq": 2
},
"expires.day":{
"$gte": 29
}
}
]
},
"sort":["created.year:number","created.month:number","created.day:number","created.hour:number","created.min:number"]
}
}
一切按计划进行,数字保持不变,因此是可能的。
有人知道如何通过我的 javascript POST 调用执行此操作吗?
提前致谢。
更新
在拨打电话之前,我尝试对发送的数据进行字符串化处理:
data:JSON.stringify(data)
服务器端如果我像这样记录它,我可以正确地看到数据
console.log(JSON.stringify(request.body))
但是如果我尝试用它制作一个对象并使用它,即
var bodyStr = JSON.stringify(request.body)
var bodyObj = JSON.parse(bodyStr)
console.log("db is " + bodyObj.db)
我得到“无法读取未定义的属性 'db'”。
如果我尝试在收到请求后直接记录数据,即
console.log(request.body);
我得到 [object Object],如果我尝试解析它而不先对其进行字符串化,我得到 p>
SyntaxError: Unexpected token o
【问题讨论】:
-
字符串化数据的日期值是否正确?你能看吗?还有什么错误?
-
@SreepathySp 如果我使用 JSON.stringify(data) 后端不再能够解析我发送的数据
-
@richmondwang 不知道你说的正确是什么意思,我正在服务器上记录我的请求,日期的值是纯数字(就像邮递员调用中的数字一样),用引号括起来标记。
-
您是否尝试将其作为 JSON.stringify(data) 发送,然后在后端解析它?
-
我做了,我会在我的问题中写下来,谢谢指出。
标签: javascript jquery json ajax post