0

当我使用 Jsonp调用“ http://api.trademe.co.nz/v1/Search/Property/Residential.xml ”时,我收到了一个意外的令牌错误。

我正在使用下面的代码来调用 api

$http.jsonp("http://api.trademe.co.nz/v1/Search/Property/Residential.json?callback=?").success((data) => {

                console.log(data);
            });

知道为什么我会收到此错误吗?这是调用jsonp服务的正确方法吗?

请求标头:在此处输入图像描述

4

2 回答 2

1

您可以使用 http.get 调用 api.trademe.co.nz 接缝,请参阅下面的演示。

var app = angular.module('app', []);

app.controller('fCtrl', function($scope, $http) {


  $http.get("http://api.trademe.co.nz/v1/Search/Property/Residential.json").then(function(response) {
    console.log(response.data)
    $scope.data = response.data
  });


});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="fCtrl">
    <p ng-repeat="item in data.List">
      {{item.Title}}
    </p>
  </div>
</div>

于 2014-10-21T09:28:01.643 回答
0

可能不再实际,但可能对其他人有用。问题是您没有按照 Trademe API 的要求发送 GET 请求,但是当您将自定义标头(在 Trademe 情况下您可能发送 oAuth 标头)添加到潜在的 GET 请求时,浏览器会发送另一个所谓的“预检请求”,即 OPTIONS 请求,根据您的屏幕截图,您可以看到方法是选项。理想情况下,Trademe 应该正确响应,以允许带有自定义标头本身的 GET 请求。由于安全措施,可能没有发生。顺便说一句,你不应该从客户端浏览器应用程序发送身份验证密钥/秘密,因为它已经暴露了。这对我来说也有点烦人,因为我想在不代理到后端的情况下从客户端 js 应用程序进行快速测试,但要解决这个问题,其中一个解决方案(对我有用)是使用“后端”代理调用。因此,您的浏览器应用程序调用了一些 node/php 脚本,该脚本执行 Trademe API 调用并将结果返回给浏览器。

有关 CORS 和预检请求的更多信息:http: //www.html5rocks.com/en/tutorials/cors/#toc-types-of-cors-requests

于 2014-12-10T07:16:05.977 回答