Safari中的角度Http帖子点击与Chrome不同的网址

时间:2017-02-14 22:32:33

标签: jquery angularjs ajax http safari

我使用angulars和内置的$ 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.assignments。这是以下代码段:



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如果有人对修复有任何建议,我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

如果您计划将数据作为带有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;
    },

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

   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