我有这个功能
var array = $("#achievement").val().split(',');
var string = JSON.stringify(array);
var data = '{"action":"add_user_achievements","data":{"gameid":"'+$("#game_id").val()+'","achievements":"'+string+'"}}';
$.ajax({
type: "POST",
url: myhost+'games',
data: JSON.stringify(data),
dataType: "json",
success: function(data){
console.log(data);
if (data.Success == true){
sweetAlert("Success!", data.Message);
} else {
sweetAlert("Oops!", data.Message);
}
},
error: function(a, b, c){
console.log(a);
console.log(b);
console.log(c);
}
});
但是它给了我500个内部服务器错误。另一方面,我使用节点js,这是我的功能。
function addUserAchievements(req,callback){
global.users.find({"uname":req.body.data.uname},
function(err,doc){
console.log('err:'+err+' and doc:'+doc);
if((doc=='')){
callback(false,err,"No user with such id exists");
}else{
var data = JSON.parse(req.body.data.achievements);
global.users.update( {"uname" : req.body.data.uname,
"games.gameid":req.body.data.gameid},
{
$addToSet:{"games.$.achievements":{$each:data}}
},function(err,doc){
if(err){
callback(false,err,"achievments are not added",null);
}else{
callback(true,err,"Achievements are added",null);
}
});
}
});
}
如何在那里成功发布我的数据?我不想弄乱服务器,所以我该怎么办?
答案 0 :(得分:3)
您正在创建字符串而不是JSON对象,因为它包含''在第一个和最后一个位置,因此您的api将您的请求数据视为字符串并给出错误。
试试这个
var array = $("#achievement").val().split(',');
var requestBodyObj = {
"action": "add_user_achievements",
"data": {
"gameid": $("#game_id").val(),
"achievements": array
}
}
$.ajax({
type: "POST",
url: myhost+'games',
data: requestBodyObj,
dataType: "json",
success: function(data){
console.log(data);
if (data.Success == true){
sweetAlert("Success!", data.Message);
} else {
sweetAlert("Oops!", data.Message);
}
},
error: function(a, b, c){
console.log(a);
console.log(b);
console.log(c);
}
});
答案 1 :(得分:2)
您正在手动创建json字符串,因此无需对其进行字符串化。 手动创建json也是一种可怕的做法,可能容易出现代码错误。当大多数语言都有序列化方法时,很少有任何理由可以手动创建它
当你以json发送时,你需要设置contentType
,如果你希望在请求体中将其作为application / json接收
使用object创建数据结构然后对对象进行字符串化
var array = $("#achievement").val().split(',');
var data = {
"action":"add_user_achievements",
"data":{"gameid":$("#game_id").val(),
"achievements":array
}
};
$.ajax({
type: "POST",
url: myhost+'games',
data: JSON.stringify(data),
contentType:'application/json',
success....
})
至于500错误,您需要检查服务器端错误以获取更多细节
答案 2 :(得分:0)
确保您的服务器代码正确无误,您列出了来自NodeJs代码的500错误。请先解决它,然后使用下面的代码来纠正您的Ajax请求。
只要创建一个数据对象并将其余数据附加到该对象并传入Ajax调用,就不要太复杂。
var data = {};
data.action = add_user_achievements;
data.gameid = $("#game_id").val();
data.achievements = $("#achievement").val().split(',');
$.ajax({
type: "POST",
url: myhost+'games',
data: data,
dataType: "json",
success: function(data){
console.log(data);
if (data.Success == true){
sweetAlert("Success!", data.Message);
} else {
sweetAlert("Oops!", data.Message);
}
},
error: function(a, b, c){
console.log(a);
console.log(b);
console.log(c);
}
});
希望这有助于谢谢:)
答案 3 :(得分:-2)
您可能需要获取要发送的对象
...
url: myhost+"games",
data: JSON.parse(data),
dataType: "json",
...