Liftweb:创建一个可以通过传统方式和 AJAX 提交的表单
Lift Web 框架是否可以创建通过 AJAX 做出反应的表单(和链接),但也可以在没有 Javascript 支持的情况下工作?如果是这样,怎么办?
当我使用
构建表单时,表单的 action
设置为 javascript://
,因此它不会不再需要 JS 提交。如果我在没有显式 AJAX 支持的情况下构建表单,我不知道如何插入 AJAX 功能。
我想我可以构建一个 RESTful 接口(无论如何我们都必须构建它)并编写自定义 Javascript 来通过该接口提交表单。不过,我想避免代码重复:如果可以使用相同的代码处理所有三个输入(RESTful、传统 HTTP POST、AJAX),那就最好了。
Is it possible in Lift web framework to create forms (and links) that react via AJAX, but also work without Javascript support? If so, how?
When I build the form using <lift:form.ajax>
, the form's action
is set to javascript://
so that it no longer submits without JS. If I build the form without explicit AJAX support, I don't know how to insert the AJAX functionality.
I suppose I could build a RESTful interface (we'll have to build that anyway) and write custom Javascript to submit the form through that. I would like to avoid code duplication, though: if it is possible to handle all three inputs (RESTful, traditional HTTP POST, AJAX) with the same code, that would be best.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看看 http://demo.liftweb.net/form_ajax
FormWithAjax.scala
form_ajax.html
这将在没有 JavaScript 的情况下工作:
Take a look at http://demo.liftweb.net/form_ajax
FormWithAjax.scala
form_ajax.html
And this will work without javascript:
我对 Lift 不太了解,所以我的回答重点是替代方法。
这是基于 jQuery 的,当 Javascript 可用时将使用 AJAX,如果没有启用 Javascript 支持,则将使用传统的 POST。
表单:
JS:
注意:jQuery
$.ajax()
默认发送为application/x-www-form-urlencoded
,设置表单可能会更好enctype="application/x-www-form-urlencoded" 也是如此。
服务器端(PHP)
那么 REST 呢?
这是您应该决定使用或不使用的东西,它不是作为其他方法(ajax、传统)的替代方法来支持的,而是更多地集成在其他方法中。
当然,您始终可以启用或禁用 REST 功能。
您始终可以使表单
method="POST/GET/PUT/DELETE"
和 ajax 调用 RESTful:但是 REST 要求我们使用 XML、JSON...来请求
,这不太好浏览器支持(无 Javascript),但
$.ajax()
使用application/x-www-form-urlencoded
作为默认编码。当然,使用 Javascript,我们总是可以将数据容器转换为 XML 或 JSON ...
以下是如何使用 jQuery、JSON 对象来完成此操作:
但我想要一个 AJAX 调用来完成所有事情:
你是对的,计算机应该完成我们的工作。这就是它们的设计目的。
因此,需要做的另一件事是检查我们的原始 html 表单想要使用哪种 http 方法,并对其进行调整,以使用与没有 javascript 支持时使用的相同方法发送 ajax 请求。
这是之前使用的 JS: 标题下的修改版本:
现在,我们的 AJAX 处理程序使用定义的方法 (post|get|put|delete) 将数据作为 JSON 对象发送在
就是这样,一些代码已经过测试并且正在实际使用,有些代码根本没有经过测试但应该可以工作。
I dont know a lot about Lift so my answer focuses on alternate way to do it.
This is jQuery based and will do with AJAX when Javascript is usable and traditional POST if there is no Javascript support enabled.
Form:
JS:
note: jQuery
$.ajax()
sends asapplication/x-www-form-urlencoded
by default, it may be good to set formenctype="application/x-www-form-urlencoded"
too.Server side (PHP)
What About REST then?
This is something you should decide to use or to not use, it is not something to support as alternate to other methods (ajax, traditional) but more something integrate within other methods.
Of course you can always enable or disable REST feature.
You can always make form
method="POST/GET/PUT/DELETE"
and ajax call RESTful:But REST asks us to use XML, JSON, ... for requests too
Well, that is not well supported by browsers (without Javascript) but
$.ajax()
usesapplication/x-www-form-urlencoded
as default encoding.Ofcourse, with Javascript one can always convert data container to XML or JSON ...
Here's how it can be done with jQuery, JSON object:
But I want one AJAX call that does everything:
You are right, computers should do our work. It's what they are designed for.
So, another thing that needs to be done is to check what http method our original html form wants to use and adapt it to send ajax requests with same method that would be used without javascript support.
This is modified version from under JS: heading used earlier:
Now, our AJAX handler sends data as JSON object using method (post|get|put|delete) that is defined at
<form method="put" ...>
, if form method changes then our ajax handler will adapt changes too.That's all, some code tested and is actually in use, some is not tested at all but should work.