簡體   English   中英

角$ http.post不返回XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM