angularjs - http请求多浏览器的烦恼

标签 angularjs http laravel cross-browser

我正在使用 angularJslaravel 5.1 中构建。

当用户点击一个按钮时,我想发送一个destroy request将其从数据库中删除,然后在完成后发送一个get request以获取新的数据现在已经被删除了。

所以我将我的方法附加到按钮上的 ng-click 事件,这有效,它点击了方法。

然后我运行一个 .destroy 请求。在那个 .destroy.then() 方法中,我想调用另一个有 .get 请求 的方法。

这在 Safari 中完美运行,但在 Chrome 或 Firefox 中不起作用。

这是我的 Controller 代码,点击按钮删除时调用的方法是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 问题。

Firefox 和 Chrome 对跨源请求的要求与 Safari 不同。此 destroy 操作的 Laravel api 端点是否与 Angular 应用位于同一位置? API 返回什么 Access-Control-Allow-Origin header ?

尝试向 Laravel 添加如下内容,看看它是否使该 block 在这些浏览器中保持一致:

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);
  }
});

(^ source)

关于angularjs - http请求多浏览器的烦恼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748887/

相关文章:

php - 在 Laravel 中检查请求数组是否为空

javascript - html Angular 表 - 类似枢轴的显示

angularjs - web api身份验证后将 token 存储在浏览器本地存储中是否安全

apache - 正在将 tomcat 应用程序 url 设置为 http ://hostname/application/possible?

java - 从 Jsoup 获取原始帖子回复

如果请求值为空,Laravel 设置默认值

laravel - 使用 Carbon 更改时区

MQTT 的 JavaScript 客户端不使用 WebSockets

javascript - 从对象数组中删除某些对象

multithreading - 如何正确停止所有流水线任务