当Javascript被禁用时,AJAX应用程序应该如何表现 - 通常的做法?

时间:2009-12-09 23:19:09

标签: javascript ajax

我正在开发非常基本的Web应用程序,这主要是因为我可以在途中学习jQuery / ajax / php(并且有一些乐趣)。我希望尽可能让用户可以访问它,因此它应该禁用Javascript,验证AAA以及所有这些。随着JS被禁用,当然没有所有的花里胡哨,但仍然应该做的工作。

我想充分利用Ajax,但我不完全明白当JS关闭时我应该如何应对。

因此,假设JS已打开,用户提交表单,单击提交按钮并通过ajax,数据将提交到register.php(register.php在表单操作属性中指定)。 register.php返回数据,jQuery显示相应的消息。全部没有重新加载页面。

现在,如果JS被禁用,向register.php提交表单将无济于事。

我理解它的方法,解决方案是为JS启用一个PHP脚本,其他用于JS禁用。因此,默认情况下,表单将具有nonjs_register.php的action属性,如果启用了JS,则会强制将表单提交到js_register.php而不是默认nonjs_register.php。 我可以想象,为每个用户与应用程序的交互创建两个脚本页面会非常繁琐,但这是我现在能想到的唯一方法。

我希望所有这些都有意义,但如果我的解释不太清楚,请告诉我。 现在,如果有人能够向我解释处理那种很棒的问题的常见做法是什么。

6 个答案:

答案 0 :(得分:2)

看一下Hijax technique,这是一种将AJAX用作progressive enhancement的方式。

答案 1 :(得分:2)

我处理这类事情的方法是使用带有javascript的事件来取消表单的默认操作。表单的默认操作是提交到其他网址:

<强> HTML

<form id="AjaxForm" action="/nonJS_register.php" method="POST">
   <!-- form input elements -->
</form>

<强> JS

document.getElementById("AjaxForm").onsubmit = function ()
{
     //- do ajax posting...
     ajaxPostForm();

     //- Cancel the default action of the form
     event.preventDefault();
     return false;
}

ajax函数可以提交给nonJS_register,或者你甚至可以添加一个参数来告诉脚本以不同的格式返回数据而不是用HTML封装。

答案 2 :(得分:2)

配方非常基础:

  1. 始终拉出页面上的所有内容 在JS被召唤之前。
  2. 然后通过JS改变一切 - 例如隐藏 需要的元素等。
  3. AJAX需要连接事件并取消 原始事件(例如点击 该链接将带您到另一个 没有JS的HTML / PHP生成的页面 可用,但有JS可用 可以更改目标以仅拉取AJAX 并返回false,所以click不会 实际上改变了页面)

答案 3 :(得分:1)

我能提出的最好的建议是如何在没有AJAX调用的情况下让它工作。通过这种方式,您可以准确地描述禁用JavaScript的方式。然后开始使用JavaScript并继续使用/不启用JavaScript进行测试。

答案 4 :(得分:1)

如果您使用AJAX实现页面的某些ESSENTIAL部分,则整个页面必须要求Javascript。

在开始实施之前,您必须指出这一点。

如果您想使Javascript可选,那么您就无法使用AJAX来实现所有通信。你将不得不使用回发,并最终覆盖按钮的“点击”事件,使回发异步(a.k.a.与AJAX)。

所以,我建议你把页面写成好像没有Javascript一样,如果启用Javascript则稍后覆盖一些功能。

答案 5 :(得分:1)

一种解决方案是让您的register.php文件识别HTTP标头:Accept在它收到的请求中,它会以多种方式之一响应:

  1. 如果传入的请求有

    接受:application / xhtml + xml,text / html,multipart / mixed,* / *

    然后返回一个HTML页面作为回复。

  2. 或者是否是其他内容,例如

    接受:application / json,application / javascript,text / javascript

    如果它具有列出的相应mime类型,它将返回JSON(在本例中)或XML。

  3. 然后在您的Javascript代码中,您将处理onsubmit事件并覆盖正常行为以执行您在问题中建议的内容(但也更改Accept标题,如上所述)。如果禁用了javascript,表单将正常提交并传递一个标题,该标题应该触发PHP返回网页。