代码之家  ›  专栏  ›  技术社区  ›  sinuhepop

基于Ajax的应用程序中的问题

  •  0
  • sinuhepop  · 技术社区  · 14 年前

    我对开发基于Ajax的应用程序非常感兴趣。也就是说,通过XMLHttpRequest加载应用程序的几乎所有内容,而不仅仅是一些组合和小部件。但是如果我试着做这个表单抓取,很快我就会发现一些没有简单解决方案的问题。我想知道是否有一些框架(客户端和服务器端)来处理这个问题。据我所知,没有(但我主要在Java世界中搜索过)。因此,我正在认真考虑做我自己的框架,至少是为我的项目。

    因此,在这个问题上,我要问几个问题。首先,基于ajax的开发可能存在的问题。然后,我正在寻找一些框架或实用程序来处理它们。最后,如果没有可用的框架,它必须具有哪些特性。

    以下是我认为的问题:

    1-必须启用JavaScript。安全性偏执并不是唯一的问题:很多移动设备也无法使用该应用程序。

    2-有时您需要更新多个DIV(例如,主要内容、菜单和面包屑)。

    3-未知响应类型:在进行Ajax调用时,也设置了回调函数,通常指定预期的响应是javascript对象还是结果放在哪个DIV中。但是,当您收到另一种类型的响应时,这将失败:例如,当会话已过期,用户必须再次登录时。

    4-浏览器的刷新、后退和前进按钮可能真的很痛苦。用户将根据情况期望不同的行为。

    5-当搜索引擎索引一个网站时,只关注链接。因此,对于还不了解Ajax的人来说,Ajax加载的内容不会“存在”。

    6-用户可以要求在其他窗口/选项卡中打开链接。

    7-地址栏不显示您所在的“真实”页面。因此,您无法复制位置并将其发送给朋友或将页面添加书签。

    8-如果你想赚钱的网站,你可以放一些广告。由于您不刷新整个页面,并且希望在一段时间后更改广告,因此只需刷新广告所在的DIV。但这可能会违反广告服务的条款和条件。事实上,它可能与AdSense TOS背道而驰。

    9-刷新整个页面时,所有JavaScript都会被“清除”。但在Ajax调用中,所有JavaScript对象都将保留。

    10-你不能轻易地改变你的CSS属性。

    4 回复  |  直到 14 年前
        1
  •  1
  •   Steffen    14 年前

    我认为你必须区分两种情况:

    1. web应用程序是登录用户(例如,博客作者和员工…)的真实应用程序。AJAX作为主要技术在这里很好,因为您可以期望您的用户满足您的系统需求(体面的浏览器,javascript)。
    2. web应用程序是对任何人公开可见的普通网站。在这种情况下,AJAX作为主要技术是完全不好的,因为你失去了访问者、搜索引擎等。总是对没有花哨内容的网站进行编码,然后用可选的花哨内容增强网站。

    因此,假设您的申请是类型1,您的问题1、5和8已经得到了回答。

    问题2:没问题。控制AJAX调用的javascript可以对答案执行任何操作。把它炸成碎片,然后按你的感觉把它们粘在沙发上。

    问题3:与问题2相同:只需在javascript中关注这些情况。

    在问题4、6和7之后:通过将应用程序状态保存到实际url的哈希中,可以重现许多正常的前向/后向行为。您可以在不重新加载页面的情况下更改哈希。许多javascript框架都提供了使这一点更加舒适的功能(例如,查看dojo的历史)。

    问题9:这是正确的,但通常不会有大问题,除非您的脚本有缺陷。

    问题10:你可以!javascript的强大功能可以帮助你做到这一点,年轻的学徒。例如,通过javascript插入链接标记。

        2
  •  1
  •   Quentin    14 年前
    1. http://icant.co.uk/articles/pragmatic-progressive-enhancement/#build
    2. 对这就是为什么您遵循MVC模式,而不只是返回m的一大块 阿库普
    3. 见第2条。
    4. http://developer.yahoo.com/yui/history/ 或类似
    5. 见1。
    6. 请参见第4节,但这并不完美,为什么Ajax对web应用程序来说是好的,但不好 对于网站
    7. 你需要选择一个你可以使用的广告服务
    8. 见第4条。
    9. 为什么不呢?
        3
  •  0
  •   Delan Azabani    14 年前

    页面内容不应该用AJAX加载,因为正是您概述的那些可用性问题。使用PHP include()或类似的服务器端模板。

        4
  •  -1
  •   Nick Pierpoint    14 年前

    我想知道是否有一些框架(客户端和服务器端)来处理这个问题。据我所知,没有

    你在开玩笑!Java Ajax框架中有很多类似的功能:

    谷歌“java ajax框架”排行榜的第一名是:

    http://ajaxpatterns.org/Java_Ajax_Frameworks