it-swarm.com.ru

Laravel Запрос angularjs :: ajax () всегда false

Я создаю приложение с помощью angularjs и laravel 4. Все хорошо, но теперь мне нужно разрешить только XHR-запросы.

Это то, что у меня есть в начале моего контроллера. Но это утверждение всегда ложно.

    if (!\Request::ajax())
    {
        return Response::json(array('halt'=>Request::ajax()));
    };

В angular я использую стандартный сервис $ http.

angular.module('APP')
.factory("API", ($http,$q,appClient,apiURL) ->
 class FB
  constructor:->
    this.deferredData = $q.defer();
  info: (reload)->
    $http(
      method: "get"
      url: apiURL+'game/'+appClient+"/info"
    ).success((res)->
      dostuff()
    )
29
zajca

При выполнении вызовов AJAX заголовок X-Requested-With часто устанавливается на XMLHttpRequest. Метод Laravel Request::ajax() построен поверх метода Symfony2, который просто проверяет наличие этого заголовка.

В октябре 2012 года Angular.js удалено этот заголовок, потому что они чувствовали, что он редко используется.

Как @Thrustmaster, так и вы упомянули в комментариях, вам нужно установить:

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

Если вы не хотите изменять интерфейсное приложение angular (или не можете) и предпочитаете изменить код Laravel, чтобы различать Angular JS AJAX запросы против других запросов, вы также можете использовать Request::wantsJson() :

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

Метод wantsJson использует стандартный HTTP-заголовок Accepts (а не нестандартный заголовок X-Requested-With) для наличия application/json. Пока Angular JS оставляет это по умолчанию, а вы не удаляете его намеренно, этот метод должен быть надежным.

23
Jeff Lambert

Для новичков AngularJ, которые ищут, куда добавить $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"

Вот пример:

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