我想将字符串转换为json字符串并通过ajax发送它

时间:2016-12-16 06:25:54

标签: javascript json ajax

我有这个功能

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);
            }
          });
      }
  });
}

如何在那里成功发布我的数据?我不想弄乱服务器,所以我该怎么办?

4 个答案:

答案 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",
...