我正在建立在laravel 5.1使用angularJs。
当用户单击按钮时,我想发送一个销毁请求,从数据库中删除它,然后当完成发送一个获取请求以获取新的数据,现在已被删除。
所以我把我的方法附加到一个按钮上的一个ng-click事件,这是有效的,它触发了该方法。
然后我运行一个.destroy请求。在.destroy的.then()方法中,我想要调用另一个具有.get请求的方法。
这在Safari中完美无缺,但在Chrome或Firefox中不起作用。
这是我的代码为控制器,该方法被称为按钮点击删除是deleteOpportunity():
$scope.getOpportunities = function() { UBOService.get() .then(function successCallback(responsed) { $scope.opportunities = responsed.data; },function errorCallback(response) { $scope.error = response; }); } $scope.deleteOpportunity = function() { UBOService.destroy($scope.activeItem.id) .then(function successCallback(response) { $scope.getOpportunities(); return false; },function errorCallback(response) { $scope.error = response; }); }
我的服务代码:
app.service('UBOService',function($http) { return { get : function() { return $http.get('/api/user-booked-opportunities'); },destroy : function(id) { return $http.delete('/api/user-booked-opportunities/' + id); } } })
我做错了吗?有没有我失踪的东西? Safari与这段代码的区别是什么?
很难从您发布的参数中测量出来,但只是根据您的说法,您可以在Safari中完美运行,但在Chrome或Firefox中不起作用,听起来可能是CORS问题。
原文链接:https://www.f2er.com/angularjs/144259.htmlFirefox和Chrome对于跨源请求而言对Safari的要求不同。您的Laravel api终点是否与您的Angular应用程序位于相同的位置?什么Access-Control-Allow-Origin头是API返回的?
尝试向Laravel添加以下内容,看看它是否使这个块在这些浏览器中保持一致:
App::before(function($request) { // Enable CORS // In production,replace * with http://yourdomain.com header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Credentials: true'); if (Request::getMethod() == "OPTIONS") { // The client-side application can set only headers allowed in Access-Control-Allow-Headers $headers = [ 'Access-Control-Allow-Methods' => 'POST,GET,OPTIONS,PUT,DELETE','Access-Control-Allow-Headers' => 'X-Requested-With,Content-Type,X-Auth-Token,Origin,Authorization' ]; return Response::make('You are connected to the API',200,$headers); } });