symfony2中的$ request-> isXmlHttpRequest()是否可靠?

PMo*_*bed 9 ajax symfony

让我们考虑如下情况:

  1. 用户选择过滤器按钮,该按钮创建对symfony2控制器的AJAX调用,并以JSON格式返回结果.
  2. 用户选择其他一些链接,系统会将他重定向到该页面
  3. 用户选择浏览器后退按钮.
  4. 用户将看到JSON响应,但他应该看到原始页面.

我的控制器如下所示:

/**
 * 
 *
 * @Route("/ajax", name="ajax_route" , options={"expose"=true})
 * @Template()
 */
public function someAction()
{
    $request = $this->getRequest();

    $json = array( );

    if($request->isXmlHttpRequest())
    {

        $res = json_encode($json);

        return new Response($res , 200 , array( 'Content-Type' => 'application/json' ));
    }

    return array( );
}  
Run Code Online (Sandbox Code Playgroud)

换句话说,如果用户按下后退按钮,则if($request->isXmlHttpRequest())返回true,这不是我要查找的结果.这是正常的行为还是什么?

Cro*_*zin 8

Symfony\Component\HttpFoundation\Request::isXmlHttpRequest()是一个简单的实用程序方法,用于检查HTTP请求是否带有X-Requested-With带有值的标头XMLHttpRequest.所以它和X-Requested-With标题一样可靠.

但是,这并不重要.要注意的重要的事情是,当用户单击后退按钮浏览器就不会发出新的HTTP请求到服务器.它只是从内部内存/缓存中恢复页面.