我编写了以下函数,该函数应该从浏览器发送一个AJAX POST请求:
function addFormToDB(email, company, subject, text) {
var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text;
$.ajax({
url: 'http://127.0.0.1/submit',
type: 'POST',
data: '{"data":"' + params + '"}' ,
xhrFields: {
withCredentials: false
},
dataType: "jsonp",
contentType: 'text/plain',
success: function(data) {
alert("success");
},
error: function(result) {
alert("error");
}
});
}
在服务器端(node.js + express),我有以下处理POST请求的函数:
app.post('/submit', function(req, res) {
console.log("enter function");
var p = new Promise(function(resolve, reject) {
db.serialize(function() {
db.run("INSERT INTO users VALUES (?, ?, ?, ?)",
[req.query['email'], req.query['company'], req.query['subject'], req.query['text']],
function (err) {
if (err) {
console.error(err);
reject();
} else {
console.log("Transaction passed");
resolve();
}
});
});
});
p.then(function(){
res.status(200).send();
}).catch(function() {
res.status(400).send();
})
});
我不知道为什么但是当发送POST请求时,没有任何反应,程序也没有输入POST请求的功能。控制台没有说什么。
我理解404错误代码意味着路由存在问题。但是,当客户端代码是这个(没有JQuery)时,它工作正常:
var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text;
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "http://127.0.0.1:3000/submit?" + params, true);
xhttp.onreadystatechange = function() {
console.log(xhttp.readyState + " " + xhttp.status);
if (xhttp.readyState == 4 && xhttp.status == 200) {
console.log("request " + params + " was sent to DB");
alert("Thank You!");
}
};
xhttp.send();
两个代码段中的路径都是相同的:http://127.0.0.1/submit,所以可能问题不在于路径。
你知道这是什么问题吗?
答案 0 :(得分:1)
您的问题是您正在进行JSON请求,这是一个GET请求。你不能制作一个POST的JSONP。查看截图中的请求,您可以看到它是一个GET。
dataType: "jsonp", <-- changes the POST to a GET
JSONP的工作方式是在页面上粘贴<script>
标记,这样就可以获得GET。所以最后Ajax和普通的JavaScript不一样。简单的JavaScript是将脚本标记附加到页面。
答案 1 :(得分:0)
它的用途是什么?
var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text
...
data: '{"data":"' + params + '"}' ,
试试吧
data: { email: email, company: company, subject: subject, text: text }
Node.js中的
req.param['email'] ... etc
答案 2 :(得分:0)
试试这个(需要删除jsonp和数据): 功能addFormToDB(电子邮件,公司,主题,文本){
$.ajax({
url: 'http://127.0.0.1/submit',
type: 'POST',
data: {email: email, company: company, subject: subject} ,
xhrFields: {
withCredentials: false
},
success: function(data) {
alert("success");
},
error: function(result) {
alert("error");
}
});
}