将数据对象发送到NodeJs服务器时,Ajax失败

时间:2017-12-05 09:51:16

标签: javascript jquery node.js ajax express

按下按钮时执行此代码

function submitData() {
    $.ajax({
        type: 'GET',
        url: '/questionnaire/submit', // listen to a route
        dataType: "json",
        data: JSON.stringify({ // some test data
            satisfactory: "house",
            improvement: "bla",
            rating: "this is a text"
        })
    }).done(function () {
        $(location).attr('href', '/sendOff'); // redirect to another route
    }).fail(function () {
        console.log("Error");
    });
}

并且服务器正在侦听

app.get('/questionnaire/submit', function (req, res) {
    var data = req.query; // Get the data object from the Ajax call

    console.log(data);

    res.send(null); // Send nothing back
});

每当按下按钮,控制台中都会记录“错误”。 Ajax调用总是失败。

即使在编写res.send("Success");时,客户端也会记录“错误”。我错过了什么?

更新 我安装了body解析器中间件并立即使用此代码

我的 app.js

const path = require('path');
const express = require('express');
const exphbs  = require('express-handlebars');
const bodyParser = require('body-parser');

const handlebars = exphbs.create({
    defaultLayout: 'index',
    extname: 'hbs'
});

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

require('./Server/Routes/questionnaire')(app);
require('./Server/Routes/sendOff')(app);

app.engine('hbs', handlebars.engine);
app.set('view engine', 'hbs');

app.use(express.static(path.join(__dirname, 'Public')));

app.listen(8888, function () {
    console.log('Server running on port 8888');
});

我的路线

module.exports = function (app) {

    app.get('/questionnaire', function (req, res) {
        res.render('questionnaire');
    });

    app.post('/questionnaire/submit', function (req, res) {
        var data = req.body;

        console.log(data);

        res.send(null);
    });
};

和我的客户端功能

function submitData() {
    $.ajax({
        type: 'POST',
        url: '/questionnaire/submit',
        dataType: "json",
        data: JSON.stringify({
            satisfactory: $("#edtSatisfactory").val(),
            improvement: $("#edtImprovement").val(),
            rating: currentRating / ratingElements.length
        })
    }).done(function () {
        $(location).attr('href', '/sendOff');
    }).fail(function () {

    });
}

执行Ajax调用时,客户端仍会运行.fail()

4 个答案:

答案 0 :(得分:1)

您正在使用GET http方法,该方法不应占用正文,您应该将数据附加到网址的后面。或者如果您想使用正文,请切换到POST。

url: '/questionnaire/submit?satisfactory=house&improvement=bla&rating=sometext

如果您正在使用POST,请不要忘记:

'Content-Type': 'application/json',

编辑:在服务器上,您需要解析JSON请求,最好使用名为body-parser的中间件:

npm install --save body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.json());

这将解析您的JSON并将其添加到req.body

答案 1 :(得分:1)

客户请求是:

function submitData() {
        $.ajax({
            type: 'POST',
            url: '/questionnaire/submit', // listen to a route
            dataType: "json",
            data: {
                satisfactory: "house",
                improvement: "bla",
                rating: "this is a text"
            }
        }).done(function () {
            $(location).attr('href', '/sendOff'); // redirect to another route
        }).fail(function () {
            console.log("Error");
        });
    }

并且服务器正在监听节点后端中的使用bodyParser中间件 :

app.post('/questionnaire/submit', function (req, res) {
    var data = req.body; // Get the data object from the Ajax call

    console.log(data);

    res.end(); // Send nothing back
});

答案 2 :(得分:1)

试试这个..

客户端

function submitData() {
    $.ajax({
        type: 'POST',
        url: '/questionnaire/submit', // listen to a route
        'Content-Type': 'application/json',
        data: JSON.stringify({"satisfactory": "house", "improvement": "bla", "rating": "this is a text"})
    }).done(function () {
        console.log('hi')
    }).fail(function () {
        console.log("Error");
    });
}

在服务器端:

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
app.use(bodyParser.json());

app.post('/questionnaire/submit', function (req, res) {
var data = req.body
    console.log(data);

    res.send(null); // Send nothing back
});

您必须使用以下命令安装body-parser库。

  

npm install --save body-parser

它将记录"嗨"作为ajax完成被称为。顺便说一句您已将页面重定向到“发送”页面。在你的问题。 如果你不理解下面的任何plz评论。

答案 3 :(得分:1)

您只需要替换

dataType: "json",

用这个:

'Content-Type': 'application/json'
$ .ajax请求中的

希望这会有效..我试过&测试