Laravel angularjs Request::ajax() always false

前端 未结 3 1589
终归单人心
终归单人心 2020-12-09 15:21

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

相关标签:
3条回答
  • 2020-12-09 15:53

    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"
    
    0 讨论(0)
  • 2020-12-09 16:09

    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.

    0 讨论(0)
  • 2020-12-09 16:09

    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';
      }]);
    
    0 讨论(0)
提交回复
热议问题