3

Hijax的定义:

Hijax 是对 AJAX 应用渐进增强的术语。它也被称为“简化的 Ajax”。Hijax 由 Jeremy Keith 提出,作为一种构建 Web 应用程序的技术,该技术仅通过使用 AJAX 技术来“劫持”表单提交和响应,更新 DOM 以反映请求/响应周期的结果,从而优雅地降级。

http://en.wikipedia.org/wiki/Hijax


我刚刚开始我的一个爱好项目,我认为“hijax”几乎所有东西都会很有趣。我使用sails.js(使用express)作为我的后端框架,客户端没有框架。


Hijaxing 常规链接(GET请求)非常简单,但是POST请求稍微复杂一些,因为它们修改数据并且必须响应操作是否成功,并且(有时)还返回带有更新数据的更新视图。

我处理POST请求(表单POST)的方式是......

  1. 在客户端,我检查任何具有type=submit属性且属于form.
  2. 我向该元素的表单 action发送AJAX 请求
  3. 在服务器上,该操作路由的控制器修改数据库,如果成功,它会发送一个res.redirect(),其中包含在发送表单后要加载的所需 URL。
  4. 回到客户端,当服务器响应重定向时,我的 hijax 脚本将“重定向”响应 HTML 插入到文档中(因为 res.redirect() 实际上发送 HTML)。

[CLIENT]下面是发送表单数据并插入响应 HTML 的客户端代码示例:

function ajaxSend(form) {
    var xhr = new XMLHttpRequest(),
        formData = new FormData(form);
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            var response = xhr.responseText;
                UI.body.innerHTML = response;
            }
        }
    }
    xhr.open("POST", form.action, true);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.send(formData);
}

[服务器]下面是这个 AJAX 脚本在 POST 请求时与之通信的控制器类型的示例:

        User.update({ id: req.user.id }, {

        }).exec(function done(err, updated) {
            if(err) return res.redirect('/profile?err');
            return res.redirect('/profile');
        });

我所有的正常GET路线都已经根据是否从 AJAX 请求它们来处理要服务的数据。这就是为什么res.redirect()还返回适当的 HTML(部分或全部内容)的原因。我在想,如果验证/数据发布出现错误,我也可以在重定向的同时发送 Flash 消息。

所以我的问题是,在数据库修改完成后依靠 res.redirect() 发送回我想要呈现的 HTML 是否可以?我的意思是,毕竟重定向指令包含在标头中,这不是很可靠,不是吗?我意识到我也可以返回一个视图,但是那将不得不复制其他控制器已经执行的代码。

谢谢。


4

0 回答 0