【问题标题】:How to get json using a jsonp request如何使用 jsonp 请求获取 json
【发布时间】:2017-08-29 04:09:06
【问题描述】:

我正在尝试使用 instagrams api,而无需进行身份验证。 如果我去:https://www.instagram.com/explore/tags/chicago/?__a=1

我收到一个 json 响应。 我正在尝试构建一个返回该数据的 Angular 4 提供程序。

getInsta(term){
    return this.jsonp.request(this.url+term+'/?__a=1&callback=__ng_jsonp__.__req0.finished')
      .map(res => {
        console.log(res.json());
      });
  }

我尝试过“回调”和“c”。我试过 JSONP_CALLBACK。

我得到以下错误:

“SyntaxError: Unexpected token ':'. Parse error. - In Chicago:1”

"JSONP 注入脚本没有调用回调"

如果我单击意外的令牌错误,它会将我带到包含所有 json 数据的响应中。所以这意味着它正在通过,我只是无法访问它!

知道如何解决这个问题吗?

这是错误的屏幕截图以及单击错误时的屏幕截图

【问题讨论】:

  • 你有什么确切的回应?
  • @SharikovVladislav 是什么意思?我收到上面列出的 2 个错误,如果我单击令牌错误并查看实际错误所在的行,它会将我带到其中包含确切数据的 jsonp 脚本,就好像您要访问 url您的浏览器。
  • 也许this answer 应该有所帮助...答案是针对 Angular 2,但其中大部分也应该适用于 Angular 4

标签: javascript json angular instagram-api ionic3


【解决方案1】:

JSONP 是一种跨源获取数据的方法,它之所以有效,是因为当文件的src 包含callback 函数名时,它会将script 标签注入到正文中。

<script src="http://ani.site.com/api/?callback=myGlobalFunc">

它假定窗口上有一个名为myGlobalFunc 的全局函数。

该呼叫的响应将如下所示:myGlobalFunc({data: 'data1'})。 使用一个参数调用函数,即数据。

在您的情况下,Instagram API 返回 JSON 而不是 JSONP

你不能使用那个机制。

【讨论】:

  • @pritambanerjee 请看我更新的问题。我理解 json 和 jsonp 之间的区别,但是数据实际上是通过的,我只是不能在我的应用程序中使用它。
  • 好的,现在看起来您是通过 jsonp 获取的,但 Instagram 正在返回 json,请将您的请求方法与实际响应类型对齐。
  • 这是我现在遇到的错误:XMLHttpRequest cannot load instagram.com/explore/tags/chicago/?__a=1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'localhost:8100'。
  • 好吧,正如我所说,JSONP 是为了克服 Cross 起源而发明的,所以就使用它吧。
猜你喜欢
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2013-09-15
  • 1970-01-01
相关资源
最近更新 更多