Angular 6错误:注入JSONP的脚本未调用回调

时间:2018-12-29 12:16:11

标签: angular angular6 jsonp angular-httpclient

正在研究Angular 6项目并尝试访问公共API,因此我需要使用JSONP来解决CORS。我的代码收到以下错误: “错误:JSONP注入的脚本未调用回调”。 我相信这是回调参数名称的问题。

我在这里和Github上花费了大量的时间来研究类似的问题,最著名的是:https://github.com/angular/angular/issues/8153,并尝试将JSONP_CALLBACK替换为:

  

ng_jsonp .__ req $ {this.times}。完成

     

__ ng_jsonp ____ req6_finished

     

,而完全省略了回调参数

但是我还没有找到成功。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map } from "rxjs/operators";

export class CoursesAPIService {

    constructor(private http: HttpClient) {}

    getData() {
        var url = 'http://web-app.usc.edu/web/soc/api/classes/?callback=JSONP_CALLBACK'
        console.log("calling: " + url)

        return this.http.jsonp(url, "callback")
           .pipe(map(data => {
               console.log("Inside map")

               console.log(data)
           })
        ).subscribe()
    }
}    

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,使用HttpClient.jsonp()时对我来说,您不应传递callback = JSONP_CALLBACK参数和值。

// try this instead
var url = 'http://web-app.usc.edu/web/soc/api/classes/?'

如果您在斜角github https://github.com/angular/angular/blob/master/packages/common/http/src/client.ts中查看源代码

1121 行的

1461(,因为本节仍在进行中,只是搜索jsonp()函数),您会注意到他们将发送该参数再次。并且您当前的url变量将变为:

// this is what's probably giving you issues after the jsonp function's internal functions are processed 
'http://web-app.usc.edu/web/soc/api/classes/?callback=JSONP_CALLBACK&callback=JSONP_CALLBACK'