2017-01-31 10 views
0

Я пытаюсь сделать вызов с использованием JSONP Угловое 2 и последовали все упомянутые в этом посте: How to make a simple JSONP asynchronous request in Angular 2?Угловое 2: запрос JSONP давая ИСКЛЮЧЕНИЕ: Ответ со статусом: 200 Ok для URL

Вот мои service.ts:

import { Injectable } from '@angular/core'; 
import { Http, Jsonp } from '@angular/http' 
import 'rxjs'; 
import { Observable } from 'rxjs/Observable'; 

@Injectable() 
export class DataLoadService { 
    private quoteApiUrl: string; 
    constructor(private http: Http, private jsonp: Jsonp) { 
        this.quoteApiUrl = `http://api.forismatic.com/api/1.0/?method=getQuote&format=jsonp&jsonp=parseQuote&lang=en&callback=JSONP_CALLBACK`; 
       } 

    getQuotes(): Observable<any>{ 
     return this.jsonp.get(this.quoteApiUrl) 
      .map(function(res){ 
       return res.json() || {}; 
      }) 
      .catch(function(error: any){ 
       return Observable.throw(error); 
      }); 
    } 
} 

И это, как я называю мой getQuotes() метод из моих home.ts:

this.dataLoadService.getQuotes() 
     .subscribe(data => { 
     console.log(data); 
     this.quotes.push(data); 
     }); 

Этот вызов JSONP, я добавил: &callback=JSONP_CALLBACK в конце моего API.

При вызове службы, я получаю правильный ответ JSON, как и в Инструменты разработчика> Network> вкладка Response Chrome:

parseQuote({"quoteText":"A failure is a man who has blundered but is not capable of cashing in on the experience. ", "quoteAuthor":"Elbert Hubbard", "senderName":"", "senderLink":"", "quoteLink":"http://forismatic.com/en/d74d7833cb/"}) 

Но я также получаю следующие ошибки:

  1. Uncaught ReferenceError : parseQuote не определен
  2. ИСКЛЮЧЕНИЕ: ответ со статусом: 200 Ok для URL: http://api.forismatic.com/api/1.0/?method=getQuote&format=jsonp&jsonp=parseQuote&lang=en&parseQuote=ng_jsonp.__req0.finished

Пожалуйста, сообщите. Я использую угловой v2.2.1.

ответ

1

Нет ничего плохого в вашем коде, проблема с URL-адресом api endpoint, который вы предоставляете. По-видимому, оно не принимает имя функции обратного вызова в параметре callback, а в параметре jsonp.

Замените свой адрес с этим, и он должен работать нормально: http://api.forismatic.com/api/1.0/?method=getQuote&format=jsonp&jsonp=JSONP_CALLBACK&lang=en

+0

Спасибо Обейд. Ваше предложение сработало. Могу ли я спросить, как вы узнали, что имя функции обратного вызова должно войти в параметр jsonp, а не параметр обратного вызова. Есть ли какая-то ошибка, которая говорит вам об этом. Если вы можете поделиться этим, это поможет мне в подобных сценариях в будущем. –

 Смежные вопросы

  • Нет связанных вопросов^_^