【问题标题】:How can I Post-redir-get without losing form data如何在不丢失表单数据的情况下发布 redir-get
【发布时间】:2011-08-18 16:52:19
【问题描述】:

假设用户得到一个页面/form/

GET /form/

然后他填写表格并发送帖子请求

POST /form/

服务器尝试验证用户输入并确定输入无效。

目前用户的历史链是

  • GET /form/
  • POST /form/

现在服务器将用户重定向到GET /form/ 页面,以便它可以再次填写表单(带有错误消息)。

他的历史看起来像

  • GET /form/ 已填写表单字段
  • GET /form/ 未在表单字段中填写

如何在不丢失用户在第一个表单中输入的详细信息的情况下将用户送回?

有哪些技术可以将用户重定向回他们的GET /form/ 页面,而不是强迫他们重新输入信息。

以下是本示例的 express (node.js) 特定服务器端代码。

验证中间件:

validate().on("error", function _error(msg) {
    // store error message on request object
    req.flash(msg, validateUserMessage[msg]);
}).on("valid", function _valid() {
    // handle the rest of /POST/
    next();
}).on("invalid", function _invalid() {
    // redirect user back to last page, the /GET/ form
    res.redirect("back");
}).run(function _validateUsers(check, sanitize) {
    // validation logic.
}); 

路由:

// GET /form/
app.get("/form", function _signUpView(req, res) {
    // render /form/
    res.render("auth/signup", req.flash());
});

// POST /form/
// validation middleware used here. 
app.post("/form", secure.validateUser, function _signUpCreate(req, res) {
    model.create(req.body, function _create() {
         // create thing in database
    });
});

【问题讨论】:

    标签: javascript http node.js


    【解决方案1】:

    不要重定向无效输入。仅对有效输入执行此操作。

    在输入无效时,使用相同的表单响应 POST 请求,但这次填充的是您刚刚收到的 POST 数据。

    【讨论】:

    • 为什么我不应该重定向无效输入?
    【解决方案2】:

    我决定将下面的 cmets 总结为我的答案:

    对我来说,似乎只有两种确定的方法可以做到这一点:


    1.将用户输入参数从服务器传回浏览器并重新填充表单:

       a) 使用传递给视图的参数对象并使用您的服务器端语言填充每个字段

       b) 传回 Json 对象并使用 loadJson 填充表单



    2.使用 HTML5 本地存储 - 这也需要 JavaScript


    如果您不使用 serverJavaScript 保留您的数据,那么您肯定会限制自己依赖浏览器 - 这是您无法控制的。

    祝你好运 - 如果您确实找到了解决方案,请将其发布为您的答案,因为我很想知道您是如何成功的。

    【讨论】:

    • 当然我会做客户端验证,我只是想知道我是否可以让服务器正确,这样它就不会丢失数据
    • 好吧,我从来没有使用过 node.js - 而不是res.redirect("back"),你能不能不使用res.render("auth/signup", _parameters, reqflash)_parameters 是用户详细信息(作为接收对象还是作为自建 JSON 对象)在哪里?
    • 另一种可能是将表示表单详细信息的 JSON 字符串放在 flash 变量中
    • 那些涉及手动构建表单详细信息,而不是让浏览器重新填充表单详细信息。我只想强制用户返回,以便浏览器为我完成这项工作。
    • 如果您愿意返回一个 JSON 对象,那么您可以使用 loadJSON JQuery 为您填充表单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多