[英]Angular JS: http.post is returning null in Internet Explorer
[英]Angular $http.post not returning XML
我試圖以有角度的方式調用Web服務,但運氣不佳。 該服務接受沒有POST正文的POST請求,並返回XML。 我可以確認該服務可與原始XMLHttpRequest調用一起使用:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
console.log(xhr.responseText); // Returns data
}
xhr.open("POST", "https://api.bmreports.com/BMRS/MessageListRetrieval/v1/?APIKey=9eu73tsryf1sons&ParticipantId=INNOGY01&PublicationFrom=1970-01-01&PublicationTo=3000-01-01&ServiceType=XML", true);
xhr.send(null);
並使用jQuery:
$.ajax({
url: 'https://api.bmreports.com/BMRS/MessageListRetrieval/v1/?APIKey=9eu73tsryf1sons&ParticipantId=INNOGY01&PublicationFrom=1970-01-01&PublicationTo=3000-01-01&ServiceType=XML',
type: "POST",
success: function(data){
console.log(data); // Returns data
},
error: function (hxr, status, errorThrown){
console.log(status);
}
});
但是,當我使用angular的$ http服務嘗試時,我什么也收不到:
angular.module('TestApp',[])
.controller('TestController', function($scope, $http){
$http({
method: "POST",
url: 'https://api.bmreports.com/BMRS/MessageListRetrieval/v1/?APIKey=9eu73tsryf1sons&ParticipantId=INNOGY01&PublicationFrom=1970-01-01&PublicationTo=3000-01-01&ServiceType=XML'
}).success(function(data, status, headers, config){
console.log("data:");
console.log(data); // Returns null
}).error(function(data, status, headers, config){
console.log("error status:");
console.log(status); // No errors returned
})
})
編輯:使用$ http.post快捷方式:
angular.module('TestApp',[])
.controller('TestController', function($scope, $http){
$http.post(
'https://api.bmreports.com/BMRS/MessageListRetrieval/v1/?APIKey=9eu73tsryf1sons&ParticipantId=INNOGY01&PublicationFrom=1970-01-01&PublicationTo=3000-01-01&ServiceType=XML'
).success(function(data, status, headers, config){
console.log("data:");
console.log(data);
}).error(function(data, status, headers, config){
console.log("error status:");
console.log(status);
})
})
請注意,$ http.post快捷方式方法具有第二個數據參數,但是我沒有要傳遞的數據。 如果我將參數包含為null,Chrome會說:
Access-Control-Allow-Headers不允許請求標頭字段Content-Type
由於$ http.post快捷方式方法不會抱怨缺少data參數,因此我故意將其遺漏了。
我需要能夠不使用數據進行POST調用,這可以通過原始XMLHttpRequest調用或jQuery的ajax方法實現。 可能出什么問題了? 謝謝!
(注意,該API是公共的,因此不必擔心我發布的API密鑰。這是有效的API密鑰,只有在打開此問題時,我才會保持活動狀態)
默認情況下,Angular期望從您的服務器獲取JSON,您可以通過添加
var app = angular.module('app', []); app.controller('homeCtrl', function($scope, $http) { $scope.xml = ""; $http({ method: "POST", url: 'https://api.bmreports.com/BMRS/MessageListRetrieval/v1/?APIKey=9eu73tsryf1sons&ParticipantId=INNOGY01&PublicationFrom=1970-01-01&PublicationTo=3000-01-01&ServiceType=XML', headers: { "Accept": "application/xml" } }).success(function(data, status, headers, config) { console.log("data:"); console.log(data); // Returns null $scope.xml = data; }).error(function(data, status, headers, config) { console.log("error status:"); console.log(status); // No errors returned }) });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app"> <div ng-controller="homeCtrl"> {{xml}} </div> </div>
根據您的要求
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.