【问题标题】:POST with Jquery and receive a response from Node.js使用 Jquery 发布并接收来自 Node.js 的响应
【发布时间】:2018-03-17 16:51:53
【问题描述】:

我正在尝试做一些非常简单的事情,我想使用 AJAX Jquery 对 Node.js 服务器进行 POST 并让服务器返回响应。我的问题是我无法从服务器获得答案。如果有人可以帮助我,我将非常感激。

client.js

$(document).ready(function(){
$("button").click(function(){
    $.post("http://localhost:3333/vrp",
    {
      name: "Donald Duck",
      city: "Duckburg"
    },
    function(data,status){
        alert("Data: " + data + "\nStatus: " + status); //This section code doesn't execute.
    })
    .fail(function() {
       alert( "error" );       //It's executed this section of code and I can see it in my browser.
    });
});
});

server.js

var vrp = require("./vrp");
var bodyParser = require("body-parser");
var express = require('express');
var app = express();

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

app.post('/vrp', function(req, res){
  console.log(JSON.stringify(req.body));   //Here I can see the message I sent.
  res.contentType('json');
  res.send(JSON.stringify(req.body));
});

var listener = app.listen(3333, function () {
  console.log('Your app is listening on port ' + 
  listener.address().port);
});

【问题讨论】:

  • 您收到什么错误消息 - 请检查您的浏览器开发工具?这可能是与 CORS 相关的问题...
  • 你试过contentType('jsonp')吗?
  • 也许你不需要这个:res.contentType('json'); res.send(JSON.stringify(req.body));res.send(req.body); 应该足够了
  • 我将尝试@Oliver 告诉我的解决方案,其他人的解决方案不起作用(我认为可能是配置问题)。如何查看响应的错误消息?很抱歉这个问题,我是这方面的初学者,我不太了解。
  • 看我的回答,它有一些准备测试/准备使用的代码。

标签: jquery node.js ajax


【解决方案1】:

尝试在 server.js 中添加 CORS 标头,例如。像这样

app.post('/vrp', function(req, res){
  console.log(JSON.stringify(req.body));
  res.header("Access-Control-Allow-Origin", "*").send(req.body);
});

如果运行,那么您 100% 确定这是 CORS 问题。 对于真正的应用程序,您可以使用此解决方案或更复杂的中间件,例如。

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

或者你可以使用 cors 中间件模块https://github.com/expressjs/cors 配置更有弹性。

【讨论】:

  • 是的!有效!非常感谢!我必须了解它,问候!
【解决方案2】:
app.post('/vrp', function(req, res){
  console.log(JSON.stringify(req.body));
  return res.status(200).send({data:req.body});
});

【讨论】:

    【解决方案3】:

    使用 Node.js LTS 版本 16.13.1 执行此操作的最新方法

    只需安装 cors 中间件模块:

    npm install --save cors
    

    并像这样在您的发布路线中使用它:

    // Other parts of your code
    var express = require('express');
    var app = express();
    var cors = require('cors');
    
    // app.use(cors()); // if you want cors to be used for all routes
    
    app.post('/vrp', cors(), (req, res) => {
        console.log(JSON.stringify(req.body));
        res.send(req.body);
    });
    

    相当整洁:)。

    如果您使用app.use(cors()),那么您不必将中间件作为参数包含在各个路由中;中间件将用于所有路由

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多