Laravel – 检查是否有Ajax请求
我一直在试图find一种方法来确定在Laravel的Ajax调用,但我没有find任何有关它的文件。
我有一个index()
函数,我想根据请求的性质不同地处理情况。 基本上这是绑定到GET请求的资源控制器方法。
public function index() { if(!$this->isLogin()) return Redirect::to('login'); if(isAjax()) // This is what i am needing. { return $JSON; } $data = array(); $data['records'] = $this->table->fetchAll(); $this->setLayout(compact('data')); }
我知道确定PHP中的Ajax请求的其他方法,但我想要的东西特定于Laravel。
谢谢
更新:
我试过使用
if(Request::ajax()) { echo 'Ajax'; }
但我收到错误: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context
这个类表明这不是一个静态的方法。
也许这有帮助。 你必须引用@参数
/** * Display a listing of the resource. * * @param Illuminate\Http\Request $request * @return Response */ public function index(Request $request) { if($request->ajax()){ return "AJAX"; } return "HTTP"; }
要检查一个ajax请求,你可以使用if (Request::ajax())
注意:如果你使用的是laravel 5,那么在控制器中更换
use Illuminate\Http\Request;
同
use Request;
我希望它能工作。
您正在使用错误的Request
类。 如果你想使用Facade如: Request::ajax()
你必须导入这个类:
use Illuminate\Support\Facades\Request;
而不是Illumiante\Http\Request
另一个解决scheme是注入一个真正的请求类的实例:
public function index(Request $request){ if($request->ajax()){ return "AJAX"; }
(现在在这里你必须导入Illuminate\Http\Request
)
if(Request::ajax())
看起来是正确的答案。 http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax
对于那些使用AngularJS前端的人来说,它并不使用Ajax头文件laravel所期望的。 ( 阅读更多 )
对AngularJS使用Request :: wantsJson() :
if(Request::wantsJson()) { // Client wants JSON returned }
public function index() { if(!$this->isLogin()) return Redirect::to('login'); if(Request::ajax()) // This is check ajax request { return $JSON; } $data = array(); $data['records'] = $this->table->fetchAll(); $this->setLayout(compact('data')); }
编写jQuery代码之后,在您的路由或控制器中执行此validation。
$.ajax({ url: "/id/edit", data: name:name, method:'get', success:function(data){ console.log(data);} }); Route::get('/', function(){ if(Request::ajax()){ return 'it's ajax request';} });
有时Request::ajax()
不起作用,然后使用\Request::ajax()
Request::ajax()
和$request->ajax()
不适用于我的情况,版本5.4.x. 我通过添加一个额外的参数来解决这个问题,指出请求是“ajax”调用。
所以像这样
$.ajax({ method: "post", // or anything, data: { method: "ajax", data: params, // Here is your data, .... }
而在laravel控制器中,你可以检查这个。
if ($request->input('method') == 'ajax') { // Something to do } else { // Another things to do. }
- 如何使用Laravel'Blade模板将variables传递给布局?
- 用laravelbuild立简单的应用程序?
- Laravel 5 – redirect到HTTPS
- Laravel's Blade:如何在模板中设置variables?
- “php artisan dump-autoload”和“composer dump-autoload”之间有什么区别?
- Laravel $ q-> where()之间的date
- 如何使用口才/stream利从单个查询中插入多行
- laravel抛出MethodNotAllowedHttpException
- Laravel-5如何使用id值和名称值从数据库填充select框