【问题标题】:What return types to use for an ajax form submission?用于 ajax 表单提交的返回类型是什么?
【发布时间】:2013-04-12 01:24:24
【问题描述】:

我有一个“新帖子”表单,它在 UI 中是模态的。当用户提交它时,一个 ajax 调用将它发布到我的 Content 控制器中的 New Post 操作。我的问题是,控制器的响应类型应该是什么?

  • 如果表单验证通过,我希望 UI 竖起大拇指,以便它可以关闭模​​式窗口并继续处理。我怀疑 JSON 在这里会是一个更好的选择,因为自省 HTML 并不那么干净。

  • 如果表单未通过验证,我需要返回替换 HTML(即重新呈现的表单,包括错误消息)。

我倾向于总是返回一个 JSON 对象。第一个属性将是一个布尔成功/失败指示器。如果插入失败,则会有第二个属性包含替换 HTML。

这听起来合理吗?有更好的选择吗?

我正在使用 jQuery 和 Zend 框架(并不是说它对答案有很大影响)。

谢谢!

【问题讨论】:

    标签: javascript json validation


    【解决方案1】:

    对您的问题的简短回答:JSON。

    而且您不必通过 ajax 响应返回 html,您可以通过 DOM 元素处理消息,例如:

    $.ajax({
        type: "POST",
        url: "login.php",
        success: function(data) {
            if (data.field.status == 'failure') {
                if (data.field.username == 'fail') {
                    $("div#usernameError").show();
                }
                if (data.field.password == 'fail') {
                    $("div#passwordError").show();
                }
            } else {
                $("div#loginOverlay").dialog("close");
            }
        },
        dataType: "json"
    });
    

    【讨论】:

    • 嘿,迈克,这真是太好了。谢谢。
    • np。您甚至可以扩展它,以便 json 包含密码输入无效的原因;不匹配,字符数太少等
    【解决方案2】:

    考虑这两个 JSON 响应:

    {
        "status": "error",
        "fields": ["username", "password"],
        "message": "Please enter valid username and password"
    }
    

    {
        "status": "ok",
        "redirect": "http:/who.cares/form/complete"
    }
    

    我建议不要替换整个表单,而是只回复重要的部分。

    此外,每次您使用innerHTML 时,上帝都会杀死一只小猫.. 并且您的 DOM 结构和引用也会被破坏。造成非常脆弱的 JS 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2015-09-21
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2011-05-12
      相关资源
      最近更新 更多