Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS Http GET使CSRF令牌无效_Javascript_Angularjs_Ajax_Symfony_Csrf - Fatal编程技术网

Javascript AngularJS Http GET使CSRF令牌无效

Javascript AngularJS Http GET使CSRF令牌无效,javascript,angularjs,ajax,symfony,csrf,Javascript,Angularjs,Ajax,Symfony,Csrf,我正在开发Symfony 3.2,我正在尝试在一些页面上使用AngularJS的一些AJAX请求 我有以下HTML代码: <div ng-app="timelineApp" ng-controller="timelineCtrl"> <div id="timeline-container"> <div ng-repeat="p in posts" class="w3-container w3-card-2 w3-white w3-round w3-mar

我正在开发Symfony 3.2,我正在尝试在一些页面上使用AngularJS的一些AJAX请求

我有以下HTML代码:

<div ng-app="timelineApp" ng-controller="timelineCtrl">
  <div id="timeline-container">
    <div ng-repeat="p in posts" class="w3-container w3-card-2 w3-white w3-round w3-margin"><br>
      // ...
    </div> 

    <div class="w3-card-2 w3-margin">
      <button ng-click="fetch()" id="fetch-button" class="w3-btn-block w3-btn w3-theme-d1 w3-round" type="button">Load 10 more posts.</button>
    </div>
  </div>
</div>


// ... 再装10根柱子。
使用javascript:

  var app = angular.module('timelineApp', []).config(function($interpolateProvider){
      $interpolateProvider.startSymbol('{[{').endSymbol('}]}');
  });

  app.controller('timelineCtrl', function($scope, $http) {
    $scope.offset = 0;
    $scope.posts = [];
    $scope.fetch = function() {
      var uri = "/api/timeline/{{ app.user.id }}/" + $scope.offset;
      $http
        .get(uri)
        .then(
          function(response) {
            $scope.posts = $scope.posts.concat(response.data.posts);
            $scope.offset += 1;

            if(response.data.posts.length < 10) {
              $('button#fetch-button').css('display', 'none');
            }
          }, 
          function(response) {
            console.log(response.status)
          } 
        )
      ;
    }

    $scope.fetch(); 
  });
var-app=angular.module('timelineApp',[]).config(函数($interpolateProvider){
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
});
app.controller('timelineCtrl',函数($scope,$http){
$scope.offset=0;
$scope.posts=[];
$scope.fetch=函数(){
var uri=“/api/timeline/{{app.user.id}}/”+$scope.offset;
$http
.get(uri)
.那么(
功能(响应){
$scope.posts=$scope.posts.concat(response.data.posts);
$scope.offset+=1;
if(response.data.posts.length<10){
$('button#fetch button').css('display','none');
}
}, 
功能(响应){
console.log(response.status)
} 
)
;
}
$scope.fetch();
});
在页面中的某些地方,我也有symfony表单,它们只是用
{{form(form_name)}}
放在那里

如果我不让任何AJAX请求发生(即,我删除了
$scope.fetch();
,并且从不单击触发请求的按钮),我的表单工作正常,我可以提交任何表单。但一旦发出一个ajax请求,我发布的任何表单都会因为无效的CSRF令牌而被拒绝


我找到了一些帖子,但没有一篇真正有用,我如何防止AJAX请求使表单无效?稍后,我还必须使用angular发出POST请求,我想我也会遇到同样的问题。

好的,经过一些尝试和调试,我实际上发现,通过编写
var uri=“/api/timeline/{{app.user.id}}/”+$scope.offset请求是向生产环境发出的,而我目前正在使用浏览器在开发环境中进行测试。因此,在会话上存在歧义

一个简单的解决方案是将其更改为
var uri=“/{%if-app.environment='dev'}app_-dev.php/{%endif%}api/timeline/{{app.user.id}}/”+$scope.offset