【问题标题】:Laravel request()->ajax() triggering on browser back buttonLaravel request()->ajax() 在浏览器后退按钮上触发
【发布时间】:2018-07-11 10:50:50
【问题描述】:

在我的控制器中,我为路由 /backups 提供了此功能

public function index()
{
    $backups = \App\Backup::all();

    if(request()->ajax()) {
        return $backups;
    }

    return view('backups.index', compact('backups'));
}

我的想法是,如果我的 javascript 请求数据,则返回 json,如果不返回 html

这很好用,除非按下浏览器后退按钮从让我们说/backups/1/backups 它显示json

是否有另一个我可以使用的函数只响应来自我的代码而不是浏览器的 ajax 调用?

【问题讨论】:

    标签: javascript php laravel


    【解决方案1】:

    我建议在 ajax 请求中添加一个仅 ajax 查询字符串参数,例如?ajax=1.

    这样,您可以 1. 利用浏览器缓存,以及 2. 为两种请求类型保持相同的 Laravel 路由。

    【讨论】:

      【解决方案2】:

      确保您的 AJAX 请求使用与完整 HTML 文档不同的 URL。 Chrome(很可能是 Firefox)会缓存最近的请求,即使它只是部分请求。

      来源:

      https://code.google.com/p/chromium/issues/detail?id=108425

      或者:

      尝试将缓存设置为 false

      $.ajax({
          dataType: "json",
          url: url,
          cache: false,
          success: function (data) {...}
      });
      

      【讨论】:

      • 这不违反 REST 约定吗?
      • @robertmylne 可能,但我只尝试了上述解决方案,它们对我有用。
      猜你喜欢
      • 2022-01-07
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 2013-03-02
      相关资源
      最近更新 更多