按下按钮时执行此代码
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()
答案 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请求中的
希望这会有效..我试过&测试