【发布时间】: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