Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让jqueryajax有一个非javascript(非AJAX)回退?_Jquery_Ajax_Forms_Submit_Progressive Enhancement - Fatal编程技术网

让jqueryajax有一个非javascript(非AJAX)回退?

让jqueryajax有一个非javascript(非AJAX)回退?,jquery,ajax,forms,submit,progressive-enhancement,Jquery,Ajax,Forms,Submit,Progressive Enhancement,我在最近的项目中做了大量的工作,但我意识到有一点问题:如果没有支持Javascript的浏览器,就不能提交任何表单,因为每个表单都使用AJAX提交 我想问大家: 我如何实现某种形式的“回退”,这样,如果他们没有启用Javascript,他们仍然可以提交表单 目前,我在标题上有一条横幅,上面写着“为了获得最佳(所谓“最佳”,我们指的是“实际工作”)体验,请在浏览器中启用Javascript。”但这似乎不是最佳解决方案 谢谢 最简单的方法是在表单中有一个提交按钮,然后在按下按钮时触发Javascri

我在最近的项目中做了大量的工作,但我意识到有一点问题:如果没有支持Javascript的浏览器,就不能提交任何表单,因为每个表单都使用AJAX提交

我想问大家: 我如何实现某种形式的“回退”,这样,如果他们没有启用Javascript,他们仍然可以提交表单

目前,我在标题上有一条横幅,上面写着“为了获得最佳(所谓“最佳”,我们指的是“实际工作”)体验,请在浏览器中启用Javascript。”但这似乎不是最佳解决方案


谢谢

最简单的方法是在表单中有一个提交按钮,然后在按下按钮时触发Javascript。如果Javascript没有启用,它将定期提交。如果是,它将运行Javascript。

对于表单,您需要为包含输入的表单标记提供方法和操作属性。然后通过提交按钮将其提交到那里。一旦成功了,就用jquery覆盖它。瞧

这是渐进式web的一大特点,您可以开发不使用javascript的页面。解决任何问题的一个切实可行的方法是,弄清楚如果你一开始从未使用过JS,你需要做什么


许多开发人员甚至不相信你应该有一个退路,虽然。。。这似乎是一场激烈的意识形态辩论。

当然。显然,后端有一些东西在处理通过AJAX发送的数据。设置表单,使其将数据(通常通过POST)发送到同一个位置,这不应该是一个巨大的麻烦。您的表单将类似于:

<form action="yourscript" method="POST">
    <input ... />
</form>


然后,一个没有javascript的用户通过直接HTTP请求提交表单,一个有javascript的用户的动作被jQuery截获。

首先编写HTML(这是您的回退),并确保它与表单提交一起工作,然后在顶部添加jQuery,这样,如果您的用户没有启用javascript,表单仍然可以使用。

我最喜欢的插件之一是。这允许简单优雅的脱脂。只需将表单设置为编写非JavaScript站点。(设置服务器以支持它。)然后,使用表单插件覆盖默认行为,而无需重复代码或逻辑进行设置。如果启用了JavaScript,您将获得AJAX功能,否则默认功能将保持不变:


document.search.responseFormat.value=“json”;
$(document.search).ajaxForm({
数据类型:“json”,
成功:功能(数据、状态、xhr){
...
},
错误:函数(xhr、状态、消息){
...
}
});
要提交的url、方法和值都由表单插件从HTML自动检索。服务器知道只返回JSON而不是整个HTML页面,因为您使用JavaScript将
responseFormat
隐藏字段值修改为
JSON

HTML

<form action="yourscript" method="POST">
    <input ... />
</form>

如果启用了javascript,它将通过ajax提交,否则将正常提交

我喜欢使用iframe,而不是将非javascript用户发送到主题文件的深处。这样他们也可以保持在原来的页面上。您只需将“target”属性添加到表单中。 您还可以通过在JS中传递的数据中添加另一个参数来轻松区分是否使用AJAX

var data = form.serialize()+'&ajax=true';
$.ajax({
  type: 'POST',
  url: 'email.php',
  data: data,
  success: function(response){
  alert(response);
  }
});

嗯,这很有帮助,但现在我有一个小问题:AJAX请求所访问的PHP文件只输出发生的事情,并将其返回表单页面以向用户显示成功/错误。我是否需要在每个表单页面上都有一个几乎相同的代码(因此我有一个用于AJAX,另一个用于普通的东西)?这是一个很好的问题。通常,我看到开发人员在PHP中编写一个包装器,它将知道ajax是否调用它,如果是,则输出ajax结果。。这样就不需要两个完整的端点。如果你想出了一个不同的/更好的解决方案,写下它并分享——“重复代码”也是一个热点问题。好的,谢谢有没有一种简单的方法可以判断它是否是从AJAX调用的?(也就是说,如果($_POST['ajax'])或其他类似于gold POST的内容,但为了更简单,我在ajax调用中添加了一个变量,并检查该变量是否在PHP中设置。然后用jquery覆盖它“如何做?”?编辑:若有人在寻找答案,你们不需要做任何额外的事情来覆盖。如果启用JS,Jquery将起作用,否则表单操作将向服务器发送非ajax。我不熟悉ajaxForm,url和数据(如果需要序列化)将如何传递?@sheikheera-url被指定为
操作
属性。数据由
控件(和
等)指定。要提交不由用户输入控件表示的值,请使用
。请记住,从服务器的角度来看,这与禁用JavaScript时的效果相同。因此,如果您知道如何在不使用JavaScript的情况下提交表单,那么使用JavaScript就没有什么可以做的了。确保查看文档和高级功能。哦!谢谢,这是一个插件,我认为它在最新版本的jQuery中是新的,但实际上是我的错,我没有阅读完整的答案。再次感谢你的回答,我想我已经浪费了你宝贵的时间
var data = form.serialize()+'&ajax=true';
$.ajax({
  type: 'POST',
  url: 'email.php',
  data: data,
  success: function(response){
  alert(response);
  }
});