【问题标题】:Client-side redirect question客户端重定向问题
【发布时间】:2011-08-22 17:42:12
【问题描述】:

我现在正在建立一个使用大量 ajax 交互的网站。现在发生的基本流程是数据在客户端和服务器端都经过验证,如果数据正确,则来自 AJAX 的响应和帖子将成为下一页的 URL。

当我收到 url 客户端时,我目前正在使用 window.location = url 执行重定向。

出于某种原因,这似乎是不正确的。具体来说,翻阅各种开源项目,很少见到。我想知道我上面描述的交互是否正确,如果不是,我可以做些什么来纠正我当前的设计。

【问题讨论】:

  • 这种做法没有错

标签: javascript ajax redirect


【解决方案1】:

重定向的最佳方式是从服务器端,主要是因为服务器知道您是否可以访问此页面并在标头中响应 302 重定向或仅将页面返回它自己,然后如果服务器批准您对页面的请求,AJAX 应该处理页面中的交互,而不考虑安全性。

如果您不关心安全性,那么window.location 就可以了。

【讨论】:

  • 为什么 window.location 会违反安全规定?
  • 不是。我的意思是你应该控制从服务器对数据的访问(就像你做的那样)并在那里重定向表单,而不是通过 AJAX 验证对内容的访问。安全问题是您的用户可以轻松禁用 JS,因此他们在仍然可以查看页面时不会被重定向。
【解决方案2】:

您所做的一切都很好,并且是人们采取的正常方法。需要记住的是,您如何处理失败的请求,即您的帖子由于某种原因失败或 ajax 请求失败等。

有一个有趣的so问题并阅读标记的答案:How to manage a redirect request after a jQuery Ajax call

希望对你有所帮助

【讨论】:

    【解决方案3】:

    这违背了 AJAX 的全部要点:避免为每次交互加载整个页面,从而限制带宽使用并提高响应速度。

    在您的设计中,每次交互都需要两个请求:一个用于验证数据,另一个用于加载下一个完整页面。您最好完全避免使用 AJAX:它肯定会更有效率。如果验证失败,为什么不返回错误响应,如果验证成功,为什么不返回成功响应以及帖子后必须显示的内容?

    【讨论】:

    • 并非我所有的页面都是通过重定向加载的,有时我手动返回 html 并将其注入 DOM(这就是你所说的我应该做的)。我想问题是我使用的 ajax 比我应该使用的多,而我应该使用传统的 HTTP 帖子来避免开销。
    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2018-01-04
    • 2021-03-22
    • 2019-12-03
    • 1970-01-01
    • 2021-02-25
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多