我的最新项目已经完成了相当多的工作,但我意识到有一个问题:如果您没有支持 Javascript 的浏览器,则无法提交任何表单,因为每个表单都使用AJAX 提交它。
我对你们所有人的问题:我怎样才能实现某种“回退”,以便如果他们没有启用 Javascript,他们仍然可以提交表单。
目前,我在标题旁边有一个横幅,上面写着“为了获得最佳(以及“最佳”,我们的意思是“实际工作”)体验,请在您的浏览器中启用 Javascript。但这似乎不是最佳解决方案。
谢谢!
我的最新项目已经完成了相当多的工作,但我意识到有一个问题:如果您没有支持 Javascript 的浏览器,则无法提交任何表单,因为每个表单都使用AJAX 提交它。
我对你们所有人的问题:我怎样才能实现某种“回退”,以便如果他们没有启用 Javascript,他们仍然可以提交表单。
目前,我在标题旁边有一个横幅,上面写着“为了获得最佳(以及“最佳”,我们的意思是“实际工作”)体验,请在您的浏览器中启用 Javascript。但这似乎不是最佳解决方案。
谢谢!
对于表单,您需要为包含您的输入的表单标签提供方法和操作属性。然后实际上通过提交按钮将其提交到那里。一旦成功,然后用你的 jquery 覆盖它。等等。
这是渐进式网络的重要之处,您可以开发无需 javascript 即可工作的页面。解决任何问题的一个实用方法是弄清楚如果你一开始就没有使用过 JS,你需要做什么。
那里的许多开发人员都不相信您甚至应该有一个后备方案……这似乎是一场激烈的意识形态辩论。
当然。显然,您在后端有一些东西可以处理通过 AJAX 发送的数据。设置表单以便它们将数据(通常通过 POST)发送到同一个地方应该不是什么大麻烦。你的表格看起来像:
<form action="yourscript" method="POST">
<input ... />
</form>
然后,没有 javascript 的用户通过直接 HTTP 请求提交表单,使用 javascript 的用户的操作被 jQuery 拦截。
首先编写 HTML(这是您的后备)并确保它适用于表单提交,然后在顶部添加 jQuery,这样,如果您的用户没有启用 javascript,表单仍然可以工作。
我最喜欢的插件之一是jQuery Form Plugin。这允许优雅简单的优雅降级。只需像编写非 JavaScript 站点一样设置表单。(设置您的服务器以支持它。)然后,使用表单插件覆盖默认行为,而无需复制代码或逻辑来设置它。如果启用了 JavaScript,您将获得 AJAX 功能,否则将保留默认功能:
<form name="search" action="/search/" method="GET">
<input name="responseFormat" value="fullHTML" />
<input name="q" />
<input type="submit" value="Search" />
</form>
document.search.responseFormat.value = "json";
$(document.search).ajaxForm({
dataType: "json",
success: function (data, status, xhr) {
...
},
error: function (xhr, status, message) {
...
}
});
要提交的 url、方法和值都由表单插件自动从 HTML 中检索。服务器知道只返回 JSON 而不是完整的 HTML 页面,因为您使用 JavaScript修改了responseFormat
隐藏字段值。json
HTML
<form action="yourscript" method="POST">
<input ... />
</form>
JS
$('form').submit(function(e){
var form=$(this);
var form_url=form.attr('action');
$.ajax({
url: form_url,
success: function(data){}
});
});
如果启用了javascript,它将通过ajax提交,否则正常。
最简单的方法是在表单中有一个提交按钮,然后在按下按钮时触发 Javascript。如果未启用 Javascript,它只会定期提交。如果是,它将运行 Javascript。
我喜欢使用 iframe,而不是将非 javascript 用户发送到我的主题文件的深处。这样他们也可以留在他们所在的页面上。您只需将“目标”属性添加到表单中。您还可以通过向您在 JS 中传递的数据添加另一个参数来轻松区分您是否使用 AJAX...
var data = form.serialize()+'&ajax=true';
$.ajax({
type: 'POST',
url: 'email.php',
data: data,
success: function(response){
alert(response);
}
});