【问题标题】:Angular 2 JSONP, injected script did not invoke callback [duplicate]Angular 2 JSONP,注入脚本没有调用回调[重复]
【发布时间】:2016-12-16 10:11:24
【问题描述】:

我正在使用 Angular 2.RC4 和打字稿

我有数据课:

    import {Injectable, Injector, ReflectiveInjector} from '@angular/core';
import {
    Http, Response, Headers, RequestOptions, HTTP_PROVIDERS, Jsonp, JSONP_PROVIDERS,
    URLSearchParams
} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import '../helpers/rxjs-operators';
import { caaConfig } from "../config/cmsaa";

getData(url: string): Observable<any>{
        let params  = new URLSearchParams();
        params.set('callback', 'JSONP_CALLBACK');
        url = this.domain + url;
        let cacheKey = 'cache_caa_http_get_' + url;
        if(this._cache[cacheKey]){
            return this._cache[cacheKey];
        }else{
            let request = this.jsonp.get(url, {search:params}).map(this.extractData).catch(this.handleError);
            this._cache[cacheKey] = request;
            return request;
            }
    }

在所有来源中:github问题,我看到的stackoverflow帖子添加回调参数解决问题。在我的情况下不是。

我的错误是:

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

和网址

http://example.com/project/invoices/4137?callback=ng_jsonp.__req0.finished

在我的引导程序中包含 JSON_PROVIDERS。

有人知道我应该解决什么问题才能从远程服务器获取数据?

【问题讨论】:

  • 您对 HTTP 请求的响应是什么? (我假设您实际上并没有在domain.com 上运行您的服务(请使用example.com 例如域,这就是它的用途,domain.com 是一个真实的网站。))
  • 当我在浏览器中调用时,答案是 JSON。通过角度响应是:``` body:JSONP 注入脚本没有调用回调。 status: 200 ok: true, type: 3 url: example.com/project/invoices/4137?callback=__ng_jsonp_.__req0.finished ```这是收到的错误,因为我有错误处理程序返回Observable.throw(error); 我在控制台中看到这个错误,因为在“浏览器中的“网络”选项卡此请求不存在
  • 那就是问题所在。你得到的是 JSON 而不是 JSONP。如果您使用的是 JSONP,那么您必须从服务器获取 JSONP,并在客户端处理 JSONP。
  • 要获取 JSON,我应该使用 JSON_CALLBACK 而不是 JSONP_CALLBACK?我已经尝试过了,但我仍然有同样的错误。我在返回 JSON 的远程服务器上没有可编辑的 API
  • 如果远程服务器返回 JSON,那么您不能使用 JSONP。没有JSON_CALLBACK 选项,URL 中的回调是 JSONP 特有的功能。

标签: javascript angularjs angular


【解决方案1】:

您的代码假定您的服务器应用程序在返回的负载中使用callback 参数。您的服务器可以使用另一个参数,例如c

此参数的内容用于生成响应负载,如下所示:

__ng_jsonp__.__req0.finished({ ... })

否则,将不会在 Angular 2 中调用回调(您的情况)。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 2019-05-26
    • 2016-11-11
    • 2019-04-01
    • 2017-06-16
    • 2012-06-25
    • 2020-02-22
    • 2014-04-03
    • 2013-04-25
    相关资源
    最近更新 更多