Safari 中的 Angular http 帖子点击的网址与 Chrome 不同



我正在使用角度和内置的$http指令来发布到我们的API端点。它可以在Chrome中工作,但是我在Safari中遇到了问题。这是我的 API 工厂打来的电话:

assignments: function(csv) {
   var deferred = $q.defer();
   $http({
     method: 'POST',
     url: '/api/numbers/assignments',
     data: $.param({
       skipBillables: false,
       assignments: csv,
     }),
     headers: {
       'Content-Type': 'application/x-www-form-urlencoded'
     }
   }).success(function(data) {
     deferred.resolve(data);
   }).error(function(data) {
     deferred.reject(data);
   })
   return deferred.promise;
 },

现在,我的控制器使用我创建的 API 分配。下面是以下代码片段:

Api.updateSubscription(org.id, cardData).then(function(data) {
   
   Api.getSession().then(function(data) {
     
     if (!_($scope.savedTollFreeNumberCheckout).isBlank()) {
       var checkouttollfreenumber = '1' + $scope.savedTollFreeNumberCheckout.tfn;
       var assignObj = [{
         phoneNum: checkouttollfreenumber,
         email: owner.emailAddress,
         percent: 0,
       }];
       var csvFile = downloadCSV(assignObj);
       console.log(csvFile);
       Api.assignments(csvFile).then(function(data) {
         $window.location.reload();
       });
     };
   });
 });

当我称之为时,它可以在Chrome中工作。唯一无法正常工作的浏览器是Safari。在 Safari 中,调用的完整 URL 是:http://local.appname.com:9000/18775078169,useremai@email.com,percentageparameter,这不是正确的端点。在 Chrome 中,它正在击中 http://local.appname.com:9000/api/numbers/assignments 如果有人对修复有任何建议,我将非常感谢您的帮助。

如果您打算将数据作为带有 post 请求的 json 对象发送,我认为您不需要 $.params。

$.param 主要用于序列化查询参数的参数。

    assignments: function(csv) {
      var deferred = $q.defer();
      $http({
        method: 'POST',
        url: '/api/numbers/assignments',
        data: {
          skipBillables: false,
          assignments: csv,
        },
        headers: {
         'Content-Type': 'application/json'
        }
       }).success(function(data) {
         deferred.resolve(data);
       }).error(function(data) {
         deferred.reject(data);
       })
       return deferred.promise;
    },

你应该这样做,或者如果你真的想将数据作为查询参数发送

   assignments: function(csv) {
      var deferred = $q.defer();
      $http({
        method: 'POST',
        url: '/api/numbers/assignments'+'?'+$.params({ skipBillables: false,assignments: csv}),
        headers: {
         'Content-Type': 'application/x-www-form-urlencoded'
        }
       }).success(function(data) {
         deferred.resolve(data);
       }).error(function(data) {
         deferred.reject(data);
       })
       return deferred.promise;
    },

但作为发送数据的好习惯

获取请求 - 使用查询参数

发布请求 - 使用 json

相关内容

最新更新