微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如果调用不是来自表单中的提交方法,则快速’渲染/重定向不起作用

任务

从JS方法执行POST请求,以便可以将变量值作为参数发送.

环境

> NodeJS
>快递
> BodyParser
> ejs

我的第一次尝试

前端:

<html>
    <head>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js'></script>
        <script type="text/javascript">
            function postAnswer() {
                $.post('Vote', { message: "hello!"}, function(returnedData) {
                    console.log("Post returned data: " + returnedData);
                });
            }
        </script>
    </head>
    <body>
        <button id='send' onClick='postAnswer()' class='btn btn-success btn-xs'>Svara</button>
    </body>
</html>

Server.js:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

app.use(bodyParser());

require('./app/routes.js')(app);

app.set('view engine', 'ejs');
app.use('/public', express.static(__dirname + '/public'));

var server = require('http').createServer(app);
server.listen(8080);
console.log('Server running on port 8080...');

routes.js:

module.exports = function(app) {
    app.get('/', function(req, res) {
        res.render('Vote.ejs', {
            message: ''
        });
    });

    app.post('/Vote', function(req, res) {
        var msg = req.body.message;
        console.log("Got POST request with message: " + msg);
        res.render('index.ejs', {
            message: ''
        });
    });
};

结果:

render方法不会呈现新页面.然而,它将返回returnedData参数中的整个’index.ejs’文件.

服务器:

客户:

第二次尝试:

<html>
    <head>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js'></script>
        <script type="text/javascript">
            function postAnswer() {
                $.post('Vote', { message: "hello!"}, function(returnedData) {
                    console.log("Post returned data: " + returnedData);
                });
                return false;
            }
        </script>
    </head>
    <body>
        <form action='/Vote' method='post'>
            <button id='send' type='submit' onsubmit='return postAnswer()' class='btn btn-success btn-xs'>Svara</button>
        </form>
    </body>
</html>

结果:

这确实有效,但它不是一个非常干净的解决方案.

我的问题:

>为什么第一次尝试不起作用?
>如何使用一个干净的解决方案将变量作为参数发送到POST请求?

解决方法:

我不是jQuery专家,但我认为第一次尝试不起作用,因为$.post发出了一个AJAX请求,就像在单页面应用程序中与后台API交互一样.

您的第二个示例提交了一个表单,该表单是一个执行导航操作的浏览器内操作(由表单的method属性指定).在这种情况下,您在jQuery中添加的事件侦听器是多余的,应该被删除 – 它在表单在其请求中提交其字段的内容之前进行另一个后台POST请求.

至于你的第二个问题,使用表单提交提交附加变量的方式(假设你实际上想要进行导航表单提交而不是针对API的XHR后台请求)是使用< input type =“hidden”&gt ;元素. 因此,总而言之,要在您的问题中执行您所描述的内容,您的示例HTML应如下所示(减去注释):

<!DOCTYPE html> <!-- only you can prevent quirks mode -->
<html>
  <head>
    <Meta charset="UTF-8"> <!-- ༼ つ ◕_◕ ༽つ Give UNICODE -->
  </head>
  <body>
    <form action='/Vote' method='post'>
      <input type="hidden" name="message" value="hello!">
      <button id='send' type='submit' class='btn btn-success btn-xs'>Svara</button>
    </form>
  </body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐