这个问题我已经在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)
我得到&#34;无法阅读财产&#39; db&#39;未定义&#34;。
如果我在收到请求时尝试直接记录数据,即
console.log(request.body);
我得到[object Object],如果我尝试解析它而不先将其字符串化,我得到
SyntaxError: Unexpected token o
答案 0 :(得分:0)
感谢所有发表评论的人,因为您在评论中已经解决了这个问题,所以我无法给予您适当的认可。
我能够通过更改代码中的两个来使其工作(数字保持数字):
1)在发送之前对数据进行字符串化
2)将 contentType 设置为所需的值,在我的情况下&#34; application / json&#34;
dynamic data = JsonConvert.DeserializeObject(receivedJsonString);
foreach (dynamic o in data)
{
Debug.WriteLine(o.country);
}
服务器端我可以正确访问该对象,而无需任何额外的解析/字符串化,例如。
var jqXHR = $.ajax({
url:baseURL+"/"+name,
contentType:"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);
}
});
最后,正如Kevin B指出的那样,你还需要设置
var dataBaseName = request.body.db;
在通话中,如果您希望返回一个对象,否则您将有一个字符串化的对象。这是&#34; json&#34;而不是&#34; application / json&#34;就像是contentType一样。