【问题标题】:When to use AJAX何时使用 AJAX
【发布时间】:2011-02-21 19:17:43
【问题描述】:

假设我们有一个用 PHP 编写的页面。此页面自行加载带有页眉、正文和页脚的模板并将其打印出来。现在假设在此页面的正文中,我们想开始一个循环并加载一些帖子(从数据库中获取的消息)。

我们还需要页面每 10 秒加载一次新帖子(如果有的话),而不刷新页面(经典 AJAX)。此 ajax 调用将使用 JSON 和 AJAX 以及微模板。

现在我只是想知道:

我们真的需要 PHP 在页面第一次加载时加载帖子吗?我们不能直接启动 Ajax 调用并使用 Ajax 加载帖子吗? (请注意,现有的 ajax 调用将保持原样,因为它从最新加载的帖子开始加载(如果没有帖子,则意味着所有帖子)。

如果您不理解我的问题,请随时告诉我。

【问题讨论】:

标签: php javascript ajax json


【解决方案1】:

在这种情况下,我认为更简单的方法是让 AJAX 处理它,如果你让 php 加载初始消息,你将在代码中有两个地方,你需要维护它们来执行相同的工作。

【讨论】:

  • @Charlie - “安全怎么样?”是什么意思?
  • PHP-ONLY-method 和 AJAX-method 在安全性方面是否相同?
  • @Charlie:不。我建议阅读 Ajax Security:amazon.com/Ajax-Security-Billy-Hoffman/dp/0321491939。 Ajax 开辟了更多的攻击面。
【解决方案2】:

我想你是在问你应该如何在第一次访问页面时加载帖子。如果是这样:当页面第一次加载时,有一些 PHP 打印出现有的帖子。然后,添加一些 JavaScript 以每 10 秒用新帖子更新页面。这是一个偏好问题。您可能希望页面首次加载时没有帖子,然后在页面加载后使用 Ajax 获取现有帖子。

编辑:

我同意 jondavidjohn 的观点,即使用纯 Ajax 可能会更好。但是,您始终可以将获取页面的代码隔离到单独的函数中。这样,生成页面的脚本调用的函数与通过 Ajax 调用的脚本相同。

【讨论】:

    【解决方案3】:

    这种技术的缺点是它不能优雅地降级。所以禁用 javascript 的人不会看到任何帖子。

    【讨论】:

      【解决方案4】:

      我建议使用 php 输出一些数据 - AJAX 需要许多人没有激活的 JavaScript。

      【讨论】:

      • 其实需要Javascript。没有 Javascript,Twitter 和 Facebook 等网站如何运行?
      • @Charlie:关闭 JavaScript,然后尝试访问这些页面。所有的交互性可能无法正常工作,但网站可以正常工作。
      • 查理,他们工作但静态。如果一切都由 AJAX 完成,没有 JS 的人就看不到太多了……
      • 这显然是真的(正如 SimpleCoder 所说)如果禁用 JS,某些页面上的某些功能将会丢失,但如果初始提取是由服务器端 PHP 脚本生成的严格 HTML,那么页面的内容仍将显示。如果所有内容都是使用 AJAX 获取的,那么如果禁用 JS,则不会显示任何内容。避免这种情况的唯一方法是将内容放在 noscript 标记中。
      【解决方案5】:

      为什么不让浏览器轮询服务器以获取新帖子,而是让浏览器在可用时使用 node.js 之类的东西将新内容推送到浏览器?

      【讨论】:

        【解决方案6】:

        我专门用 AJAX 设计了my site,除了一个相当大的问题外,它运行良好:使用 AJAX 需要启用 JS。当然,如果用户信任您的网站,这不是问题,但如果他们不信任,那么 AJAX 解决方案将无法工作,除非您将整个页面放在 noscript 标记中。

        【讨论】:

        • 该页面显然还没有优雅地降级,但我的方法是假设它具有完整的功能,然后从那里向后工作。它最终会优雅地降级,但那些允许我使用 JS 的人将获得第一优先权。我还认为,为了优雅地降级,首先要知道你要降级的是什么。以目前的形式,它也是使用 OP 提出的技术而没有后备计划的问题的一个很好的例子。
        猜你喜欢
        • 2013-06-20
        • 2013-05-23
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多