Ошибка при получении jsonp из http-клиента aurelia

У меня есть приложение, которое я создаю с помощью Aurelia. Я хочу получить последние изображения от пользователя в Instagram через ajax. Я попытался использовать http-клиент Aurelia, потому что это пример Flickr на начальной странице Aurelia.

Если я использую http.getзатем я получаю ошибку CORS от Instagram. Попытка http.jsonpпроверенный ответ показывает правильный формат, но я получаю то, что выглядит как ошибка синтаксического анализа (неожиданный токен ":") перед выполнением обратного вызова, который обрабатывает ответ.

Я могу успешно получать изображения через AJAX с помощью jQuery, но мне любопытно узнать, что я делаю неправильно с http-клиентом Aurelia.

Вот соответствующие биты модели представления:

import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';

@inject(HttpClient)
export class Welcome {
  images = [];
  url = '[INSTAGRAM_URL]';

  constructor(http){
    this.http = http;
  }

  activate(){
    return this.http.jsonp(this.url).then(response => {
      this.images = response.data.map(function (d) {
            return {
                src: d.images.standard_resolution.url,
                caption: d.caption.text,
                when: d.created_time
            };
        });
    });
  }
}

1 ответ

Решение

API Instagram ожидает callback Получить параметр, который будет присутствовать в URL запроса. Этот параметр должен быть именем функции, чтобы обернуть объект ответа (Aurelia добавит что-то вроде &callback=jsonp_callback_59563). Причина, по которой он работает с jQuery.jsonp, заключается в том, что он добавляет callback Параметр автоматически за сценой.

Правильный код тогда должен быть:

return this.http.jsonp(this.url, 'callback').then(response => {
  this.images = response.content.data.map(function (d) {
        return {
            src: d.images.standard_resolution.url,
            caption: d.caption.text,
            when: d.created_time
        };
    });
});
Другие вопросы по тегам