I\'m building application with angularjs and laravel 4. Everything is fine but I need now to allow only XHR requests.
This is what I have at the beginning of my con
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';
}]);