2017-02-22 95 views
0

我有一個角度應用程序。我遇到POST調用並使用$ http指令。在我的控制器使我通過API服務的消費,我提出兩個電話:)getMe(和和任務(CSV):

assignments: function(csv) { 
 
    var deferred = $q.defer(); 
 
    $http({ 
 
     method: 'POST', 
 
     url: '/api/numbers/assignments', 
 
     headers: { 
 
     'Content-Type': 'application/x-www-form-urlencoded' 
 
     }, 
 
     data: $.param({ 
 
     skipBillables: false, 
 
     assignments: csv, 
 
     }) 
 
    }).success(function(data) { 
 
     deferred.resolve(data); 
 
    }).error(function(data) { 
 
     deferred.reject(data); 
 
    }) 
 
    return deferred.promise; 
 
    }, 
 
    getMe: function() { 
 
    return this.cachedGet("https://stackoverflow.com/users/me"); 
 
    },
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

這裏是在控制器中的實際通話。我們向用戶端點發出GET請求,然後發佈到回調中的分配。

Api.getMe().then(function(data) { 
 

 

 

 
}, function(error) { 
 
    $window.location.reload(); 
 
}).finally(function() { 
 
    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) { 
 
    //do something 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

它正確地執行Chrome和Firefox,但不是Safari瀏覽器。在Safari中,它會調用一個GET請求到http:applicationname.com/18885052939,[email protected],percentageparameter。該請求實際上是將POST調用的序列化參數調用到分配。

在Chrome中,我們有正確的行爲。在用戶/我的GET請求之後,我們用POST數據參數打了http://local.appname.com:9000/api/numbers/assignments

不知道是什麼導致了Safari中的錯誤,但想知道我出錯的地方。這是angular(1.2.15)的舊版本。

+0

Angular v1.2的最新缺陷修復程序是v1.2.32。嘗試該版本以查看是否有任何與Safari相關的bug已修復。 – georgeawg

+0

謝謝@georgeawg我會試試看。 –

+0

@georgeawg試過了。它似乎不是問題的根源。 –

回答

0

使用AngularJS v1.4,該框架使url參數序列化程序可用作爲$httpParamSerializer,用於POST請求到僅支持內容類型application/x-www-form-urlencoded的API。

function assignments(csv){ 
    promise = $http({ 
     method: 'POST', 
     url: '/api/numbers/assignments', 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
     }, 
     data: { 
     skipBillables: false, 
     assignments: csv, 
     }, 
     transformRequest: $httpParamSerializer 
    }); 
    return promise; 
} 

對於不接受application/json的AngularJS框架默認的API,應用程序開發人員不再需要編寫自己的串行或加載的jQuery其串行。

相關問題