节点js无法解析字符串化的json

时间:2015-09-07 12:32:42

标签: ajax json node.js express

嘿我试图将我的ajax json输入发送到我的服务器,但它不会工作。

在将json(字符串化)发送到我的服务器时,我的服务器正在哭泣: SyntaxError:意外的输入结束     在Object.parse(native)

但是当我通过Postman发送相同的json时,不会出现错误。

我的阿贾克斯:

       $.ajax({
            method: "POST",
            url: "/new",
            data: {ort: park[0], activity: activity, datum: date, teilnehmerzahl: teilnehmerzahl, schwierigkeit : schwierigkeit, dauer : dauer, time : time, treffpunkt : treffpunkt},
            dataType: "json",
            success: function (data) {
                alert(data);
            }
            , error: function (jqXHR, textStatus, err) {
                alert('text status ' + textStatus + ', err ' + err)
            }
        });

典型的字符串化json:

{"ort":"Bayerischer Wald","activity":"Klettern","datum":"17.09.2015","teilnehmerzahl":"2","schwierigkeit":"Anfänger","dauer":"1h","time":"12:00","treffpunkt":"Hier"}

我的客户:

app.post('/new', jsonParser, function(req,res){
    var test = JSON.stringify(req.body);
    fs.readFile('./views/neueGruppe.ejs', {encoding: 'utf-8'}, function(err, filestring){
        if(err){
            throw err;
        }
        else{
            var options = {
                host: 'localhost',
                port: 3000,
                path: '/new',
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'Content-Length': test.length
                }
            }

            var req = http.request(options, function(response) {
                response.on('data', function (chunk) {

                });
            });

            req.on('error', function(e) {
                console.log('problem with request: ' + e.message);
            });

// write data to request body
            req.write(test);
            req.end();
        }
    });
});

我的服务器:

rest.post("/new", jsonParser, function(req,res){

    var data = {users:
        [
            {id: 1, name: "Peter"},
            {id: 2, name: "Jessica"}
        ]}


    console.log(req);
    res.json(data);


});

当我将客户端上的Content-Type从Json更改为文本时,不会出现任何错误,但也没有发送任何数据。它只发生在我尝试将其作为json发送时,但即使是jsonlint也说它有效的json ......

2 个答案:

答案 0 :(得分:3)

使用JSON.stringify方法发送正确的请求。

  

JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,或者如果指定了replacer数组,则可以选择仅包含指定的属性。

     

<强>语法

     

JSON.stringify(value[, replacer[, space]])

Source: Mozilla Contributors

JSON.stringify()将值转换为JSON表示法

$.ajax({
    method: "POST",
    url: "/new",
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ort: park[0], activity: activity, datum: date, teilnehmerzahl: teilnehmerzahl, schwierigkeit : schwierigkeit, dauer : dauer, time : time, treffpunkt : treffpunkt}),
    dataType: "json",
    success: function (data) {
        alert(data);
    },
    error: function (jqXHR, textStatus, err) {
        alert('text status ' + textStatus + ', err ' + err)
    }
});

答案 1 :(得分:2)

要在请求正文中正确发送JSON,请使用JSON.stringify:

&#13;
&#13;
       $.ajax({
            method: "POST",
            url: "/new",
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify({ort: park[0], activity: activity, datum: date, teilnehmerzahl: teilnehmerzahl, schwierigkeit : schwierigkeit, dauer : dauer, time : time, treffpunkt : treffpunkt}),
            dataType: "json",
            success: function (data) {
                alert(data);
            }
            , error: function (jqXHR, textStatus, err) {
                alert('text status ' + textStatus + ', err ' + err)
            }
        });
&#13;
&#13;
&#13;

可在此处找到更多信息:jQuery posting valid json in request body