Laravel - 检查是否为 Ajax 请求

7 浏览
0 Comments

Laravel - 检查是否为 Ajax 请求

我一直在尝试找到一种方法来确定Laravel中的Ajax调用,但是我没有找到任何关于它的文档。\n我有一个index()控制器函数,我希望根据请求的性质以不同的方式处理响应。基本上,这是一个绑定到GET请求的资源控制器方法。\n

public function index()
{
    if(!$this->isLogin())
        return Redirect::to('login');
    if(isAjax()) // 这就是我需要的。
    {
        return $JSON;
    }
    $data = array(
        'records' => $this->table->fetchAll()
    );
    $this->setLayout(compact('data'));
}

\n我知道在PHP中确定Ajax请求的其他方法,但我想要一些特定于Laravel的东西。\n谢谢\n更新:\n我尝试使用\n

if(Request::ajax())
{
    echo 'Ajax';
}

\n但是我收到了这个错误:\n不应从不兼容的上下文中调用非静态方法Illuminate\\Http\\Request::ajax()\n该类显示这不是一个静态方法。

0
0 Comments

问题的原因是使用了错误的Request类。如果想要使用Facade的方式,比如Request::ajax(),需要导入Illuminate\Support\Facades\Request类,而不是Illumiante\Http\Request

解决方法之一是注入一个真实请求类的实例:

public function index(Request $request){
    if($request->ajax()){
        return "AJAX";
    }

(现在你需要导入Illuminate\Http\Request

你是对的,我已经修复了。有个其他的人在上面放了一个use语句,我没有注意到。谢谢:)

0
0 Comments

在使用Laravel进行开发时,有时候需要判断当前请求是否为Ajax请求。通常情况下,我们可以使用$request->ajax()方法来判断。但是,如果在JavaScript库中没有设置X-Requested-With HTTP头,$request->ajax()方法可能无法正常工作。

解决这个问题的方法是使用$request->wantsJson()方法来判断是否为Ajax请求。这个方法不需要X-Requested-With头的设置,它会直接检查axios请求是否为JSON类型。

默认情况下,Laravel会在js/bootstrap.js中设置X-Requested-With头,代码如下所示:

window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

但是在我的情况下,我使用了不同的前端代码,需要手动设置X-Requested-With头才能让$request->ajax()方法正常工作。

使用$request->wantsJson()方法的好处是它符合HTTP规范中关于内容协商的规定。因此,如果你的控制器需要决定是否以JSON格式响应,使用$request->wantsJson()方法是一个更好的选择,而不是使用$request->ajax()方法。

0
0 Comments

Laravel - 检查是否为Ajax请求

在Laravel中,有时需要判断当前请求是否为Ajax请求。下面是一种判断方法:

/**
 * Display a listing of the resource.
 *
 *   Illuminate\Http\Request $request
 *  Response
 */
public function index(Request $request)
{
    if($request->ajax()){
        return "AJAX";
    }
    return "HTTP";
}

以上代码中,通过使用`$request->ajax()`方法判断当前请求是否为Ajax请求。如果是Ajax请求,则返回"AJAX";如果不是Ajax请求,则返回"HTTP"。

如果在控制器中使用了`Illuminate\Http\Request`的命名空间,以上方法将有效。

另外,还可以使用`request()->ajax()`方法来判断是否为Ajax请求。这种方法同样有效,并且在Laravel 5.2版本中测试通过。

希望以上内容对您有所帮助!

0