Laravel angularjs Request::ajax() always false Laravel angularjs Request::ajax() always false php php

Laravel angularjs Request::ajax() always false


When doing AJAX calls, the X-Requested-With header is often set to XMLHttpRequest. Laravel's Request::ajax() method is built on top of a Symfony2 method that simply checks for the presence of this header.

In October 2012, Angular.js removed this header because they felt that it was rarely used.

As @Thrustmaster and yourself mentioned in the comments, you need to set:

$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"


If you'd rather not modify the front-end angular application (or can't), and would rather modify your Laravel code to differentiate between Angular JS AJAX requests vs. other requests, you can also use Request::wantsJson():

if(Request::wantsJson()) {    // Client wants JSON returned } else {    // Client does not want JSON returned}

The wantsJson method relies on the standard Accepts HTTP header (rather than the non-standard X-Requested-With header) for the presence of application/json. As long as Angular JS leaves that in by default and you don't remove it on purpose, this method should be reliable.


For AngularJs newbies looking for where to add $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"

Here is an example:

var angularApp = angular  .module('angularApp', [    'ngResource',  ])  .config(['$httpProvider', function($httpProvider) {      $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';  }]);