2015-08-03 1 views
2

У меня есть приложение, которое я создаю с использованием Aurelia. Я хочу получить последние изображения от пользователя в instagram через ajax. Я попытался использовать Aurelia http client, потому что это то, что использует пример Flickr на странице начала работы Aurelia.Ошибка получения jsonp от клиента aurelia http

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

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

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

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 
      }; 
     }); 
    }); 
    } 
} 

ответ

2

Instagram API ожидает параметр callback GET присутствовать в 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 
     }; 
    }); 
}); 
+0

Ах! Когда я читаю документацию, я читаю «обратный вызов» как просто «обратный вызов» (произвольным образом) - не то, что имя параметра на самом деле нужно называть «обратным вызовом» .... Я должен прочитать более внимательно. Благодаря! –