【问题标题】:How to POST JSON data to server using AJAX jQuery如何使用 AJAX jQuery 将 JSON 数据发布到服务器
【发布时间】:2021-09-15 21:05:08
【问题描述】:

尝试将“订单”JSON 数据发布到 Node.js 服务器上的 JSON 文件时不断出错

GET 请求工作正常,但在尝试执行 POST 请求时执行“错误”函数而不是“成功”函数。我错过了什么吗?需要用php吗?

开发工具控制台显示以下错误消息:

POST http://.../orders.json 405 (Method Not Allowed) jquery.js:10109

$("#add-order").on("click", function()
{
    var order = 
    {
        name: $name.val(),
        food: $food.val()
    };

    $.ajax(
    {
        type: "POST",
        url: "orders.json",
        dataType: "json",
        contentType: "application/json",
        data: JSON.stringify(order),
        processData: false,
        success: function(newOrder)
        {
            alert("success");
            $orders.append("<li>Name: " + newOrder.name +", food: " + newOrder.food + "</li>");
        },
        error: function()
        {
            alert("Error posting order");
        }

    });
});

节点js服务器

const http = require("http");
const fs = require("fs");
const port = 3000;

const server = http.createServer(function(request, response)
{
    response.writeHead(200, { "Conent-Type": "text/json" })
    fs.readFile("orders.json", function(error, data)
    {
        if (error)
        {
            response.writeHead(404);
            response.write("Error: File Not Found");
        } 
        else response.write(data);
        response.end();
    })

});

server.listen(port, function(error)
{
    if (error) console.log("Something went wrong. Error: ", error);
    else console.log("server is listening to port " + port);
})

【问题讨论】:

  • 好吧,你遇到了什么错误?
  • 不,PHP 不会解决你遇到的任何问题。
  • @Bergi 很抱歉没有澄清。我指的是我在 AJAX 对象中设置的“错误”函数。尝试发布 JSON 数据时,会执行“错误”函数而不是“成功”函数
  • onerror 回调传递了一个错误作为其参数 - 记录:error: function(err) { console.error('posting order', err); }。还要检查你的 devtools 控制台一般有什么消息。
  • @Bergi 我已经提供了开发工具控制台错误信息

标签: javascript node.js json ajax


【解决方案1】:

var http = require('http');
var requestListener = function(req, res) {
  console.log("" + req.method)
  if (req.method === "POST") {

    let data = '';
    req.on('data', chunk => {
      data += chunk;
    })
    req.on('end', () => {
      console.log(data)
      res.end("received");
    })

  }
  res.writeHead(200);
  res.end('Hello, World!' + req.method);
}

var server = http.createServer(requestListener);
server.listen(3000, function() {
  console.log("Listening on port 3000")
});








//curl -d '{"name":"1","age":"2"}' -H 'Content-Type: application/json' localhost:3000

//Output

/*
Listening on port 3000
POST
undefined
{"name":"1","age":"2"}
*/

或者您可以探索 express 或任何其他中间件,以便于解析和处理。

【讨论】:

  • 以上代码在katacoda.com/courses/nodejs/playground进行了试用和测试
  • 出了什么问题?你改变了什么,为什么?那是怎么解决的?请发布解释,而不仅仅是代码。
  • @Bergi if (req.method === "POST") 没有正确处理,这是不言自明的。
猜你喜欢
  • 2015-09-12
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多