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
)的方式是......
- 在客户端,我检查任何具有
type=submit
属性且属于form
. - 我向该元素的表单 action发送AJAX 请求。
- 在服务器上,该操作路由的控制器修改数据库,如果成功,它会发送一个res.redirect(),其中包含在发送表单后要加载的所需 URL。
- 回到客户端,当服务器响应重定向时,我的 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 是否可以?我的意思是,毕竟重定向指令包含在标头中,这不是很可靠,不是吗?我意识到我也可以返回一个视图,但是那将不得不复制其他控制器已经执行的代码。
谢谢。