2016-01-16 46 views
0

我学习了AngularJs,我试着编写一个非常基本的脚本,向eBay公共API发送一个http请求,我已经注册并获得API密钥,我读过的文档几次,写了这个基本代码:在浏览器中工作时,角度HTTP GET请求返回undefined

$scope.getQueryUrl = function() { 
    // Some unrelated code ... 
    $scope.queryUrl["Ebay"] = "http://svcs.sandbox.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-NAME=FindingService&SERVICE-VERSION=1.0.0&GLOBAL-ID=EBAY-US&SECURITY-APPNAME="+dataAuth.EbayKeyApi+"&RESPONSE-DATA-FORMAT=XML&keywords="+$scope.qtext ; 

}; 
$scope.sendRequest = function() { 

    $scope.getQueryUrl(); // Gets the query url after adding all the parameters 
    alert($scope.queryUrl.Ebay); 
    $http.get($scope.queryUrl["Ebay"]).then(
     function(response){ 
      alert("success" + response.data); 
     }, 
     function(response){ 
      alert("error" + response.statusCode); 
     }); 


}; 

如何这个代码应工作:

它应该创建一个格式化的易趣查询网址,通过HTTP GET请求,并发送回发送响应 。

注意:$scope.qtext & dataAuth.EbayKeyApi已被分配各自的值。

什么问题

的问题是,使用这个脚本Angularjs,代码不工作,警告“错误”字样,而response.statusCode是不确定的。

但是,当我在Firefox中复制格式化的Ebay查询链接时,它完美地工作,并显示XML响应。

格式化的Ebay查询是使用提供的脚本生成的。

我认为这是一个头相关的问题。

+0

检查浏览器开发工具网络中的实际请求。 API可能不支持CORS。很少有xml输出。看看他们是否有'json'格式或'jsonp'。另外$ http默认是json。一些API不能被ajax访问,并且需要使用代理来获取数据 – charlietfl

回答

0

$ http有一些默认标头定义。 $ http默认发送Json负载并接受Json作为响应。由于您正在处理XML,因此您必须使用标头明确指定接受的响应类型为XML: 接受:application/xml

请使用以下函数并使用适当的标头,您应该得到响应。此外,请查看ebay API上的任何跨源资源共享(CORS)限制。

function getRequest(url) { 

     $http({ 
      method: "GET", 
      url: url, 
      headers: { 
       'Content-Type': 'application/xml, text/xml', 
       'Accept': 'application/xml, text/plain, */*' 
      } 
     }) 
      .then(function (response) { 
        alert(response.data); 
       }, 
       function (error) { 
        alert (error); 
       }); 
     } 

谢谢, Soma。

+0

我试过了,添加了浏览器发送的所有页眉参数,仍然不起作用 – DeltaWeb