php - example - angular http post headers
Solicitud Laravel angularjs:: ajax() siempre falso (3)
Cuando se realizan llamadas AJAX, el encabezado X-Requested-With
menudo se establece en XMLHttpRequest
. El método Request::ajax()
Laravel se basa en un método Symfony2 que simplemente verifica la presencia de este encabezado.
En octubre de 2012, Angular.js removed este encabezado porque consideraron que rara vez se usaba.
Como @Thrustmaster y usted mencionados en los comentarios, debe configurar:
$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"
Estoy creando una aplicación con angularjs y laravel 4. Todo está bien, pero ahora necesito permitir solo las solicitudes XHR.
Esto es lo que tengo al principio de mi controlador. Pero esta afirmación es siempre falsa.
if (!/Request::ajax())
{
return Response::json(array(''halt''=>Request::ajax()));
};
En angular estoy usando el servicio estándar de $ 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()
)
Para los principiantes de AngularJs que buscan dónde agregar $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"
Aquí hay un ejemplo:
var angularApp = angular
.module(''angularApp'', [
''ngResource'',
])
.config([''$httpProvider'', function($httpProvider) {
$httpProvider.defaults.headers.common["X-Requested-With"] = ''XMLHttpRequest'';
}]);
Si prefiere no modificar la aplicación angular del front-end (o no puede), y prefiere modificar su código Laravel para diferenciar entre las solicitudes Angular JS AJAX y otras solicitudes, también puede usar Request::wantsJson()
:
if(Request::wantsJson()) {
// Client wants JSON returned
} else {
// Client does not want JSON returned
}
El método wantsJson
se basa en el encabezado estándar de HTTP wantsJson
(en lugar del encabezado X-Requested-With
no estándar) para la presencia de application/json
. Siempre que Angular JS deje eso por defecto y no lo elimines a propósito, este método debería ser confiable.