从旧式重定向后发布到现代ajax表单处理

时间:2016-02-06 21:57:11

标签: javascript ajax forms

到目前为止,我主要做了老式网页表格处理:

    如果数据有效,
  • 在发布后重定向
  • 如果数据无效,则再次显示表单

我想从这种老派的方式转向现代的ajax表格提交。

我看到客户端服务器对话框有两种方式来传输状态(帖子是否成功):

  1. HTTP状态代码
  2. JSON数据
  3. 是否有通用方式甚至是互联网标准如何通过ajax处理表单提交?

2 个答案:

答案 0 :(得分:2)

通常的做法是发送HTTP代码和JSON有效负载,这可能是4xx代码的错误详细信息,或者是成功的重定向URL。此外,在AJAX世界中,您不必重定向,您可以只停留在同一页面上(通常会向用户提供有关成功操作的一些反馈)。

例如,在你的后端你可以有像

这样的东西
@post('/change-password')
if not-logged-in
    return { status: 403, message: "Please log in" }
if post[old-password] != user.password
    return { status: 400, message: "Please enter the correct password" }
user.change-password(post[new-password])
return { status: 200, redirectURL: '/home' }
// or to stay on the same page:
return { status: 200, message: "Password updated!" }

并在客户端像这样处理它:

    function success(json) {
        if(json.message)
            return showMessage(json.message)
        if(json.redirectURL)
            window.location.href = json.redirectURL
    }

    function error(xhr) {
        var json = xhr.responseJSON;
        showMessage(json.message)
    }

    $.ajax({
        type: 'post',
        url: '/change-password',
        data: {old-password: $(...).val(), new-password: $(...).val() },
        success: success,
        error: error
    });

答案 1 :(得分:1)

使用HTTP状态代码是限制性的和不正确的。

它的限制因为你基本上可以返回成功或失败,但没有细节(例如,多个字段失败......)

这是不正确的,因为HTTP status codes具有明确定义的含义,其中的含义不适合无效的表单数据。

使用JSON结果更有用,您可以在其中包含所有有意义的信息以供显示。