res.end()不适用于jquery post请求

时间:2017-08-22 19:39:38

标签: jquery node.js

为什么即使console.log运行,res.end('Sent')也不起作用?我相信这是因为邮件请求的发送方式,但我真的不知道为什么。

HTML

<!DOCTYPE HTML>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.1.1.js" integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA=" crossorigin="anonymous"></script>
<script>
function post() {
  $.post("/", {
    type: "foo"
  });
}
</script>
</head>
<body><button onclick="post()">Post</button></body>
</html>

的NodeJS

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
var server = http.createServer(function(req, res) {
    if (req.method == 'POST') {
        console.log('foo');
        res.end('Sent');
    } else {
        res.end(index);
    }
}).listen(8080);

1 个答案:

答案 0 :(得分:0)

来自浏览器的ajax请求只是向服务器发送请求并检索响应。就其本身而言,ajax响应与浏览器中显示的页面无关。如果你想在浏览器中对ajax响应做一些事情,那么你必须编写一些Javascript来处理响应,然后用它做一些事情。

至少,你可以在控制台上写一些东西,看看你得到了什么回应。

<script>
function post() {
  $.post("/", {type: "foo"}).then(function(data) {
    // handle response here
    console.log(data);
  });
}

如果您希望在当前浏览器窗口中显示该内容,您还可以编写一些Javascript以将该内容插入当前页面:

<script>
function post() {
  $.post("/", {type: "foo"}).then(function(data) {
    // replace current page contents with the data we got back
    document.body.innerHTML = data;
  });
}

如果您在HTML页面中创建表单并使用操作URL和POST作为方法进行设置并让浏览器自动提交表单,那么浏览器将从服务器获取任何响应并自动替换具有该响应的当前页面的内容。但是,只有表单由浏览器本身提交,而不是通过您自己的Javascript调用Ajax。 Ajax调用本身不会影响当前页面内容。从Ajax调用对当前页面的任何更改都必须由您自己的Javascript完成。