Встроенный URL-адрес Twitter «No-Access-Control-Allow-Origin» с обычного сервера

#ajax #angularjs #http #twitter

#ajax #angularjs #http #Twitter

Вопрос:

При попытке получить HTML-код твита на основе идентификатора я получаю следующую ошибку:

 XMLHttpRequest cannot load https://api.twitter.com/1/statuses/oembed.json?id=484587947543781376. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://app-theysoundlike.rhcloud.com' is therefore not allowed access. 
  

Как вы можете видеть, источника нет localhost , он находится на обычном сервере в Openshift. Я использую следующий код AngularJS для отправки запроса:

 $http({
        url:'https://api.twitter.com/1/statuses/oembed.json?id=' data.id,
        method:"GET"
        }).success(function(data){
            $scope.tweetHTML = data.html;
            $scope.tweetAvailable = true;
        });
});
  

data.id Это не проблема, потому что URL формируется правильно. Фактический запрос не выполняется.

Ответ №1:

Попробуйте использовать $ http.jsonp с url

 https://api.twitter.com/1/statuses/oembed.json?id={{YOUR_ID}}amp;callback=JSON_CALLBACK
  

Комментарии:

1. Спасибо, я попробую это. Однако у меня есть вопрос. Должен ли я указывать имя функции в JSON_CALLBACK параметре. Также.. как это работает? Как Twitter вызовет функцию на моем сайте?

2. JSON_CALLBACK необходим для стандартной функции обратного вызова angularjs $http JSON_CALLBACK автоматически отправляет в $ http.jsonp().success() или .fail(). Я не углубляюсь в эту технологию, возможно, эта статья сможет помочь с этим — en.wikipedia.org/wiki/JSONP

3. @strlok2010, спасибо, сегодня узнал кое-что новое. Итак, чтобы уточнить, JSON_CALLBACK — это не заполнитель для моей собственной функции, а скорее что-то, на что ссылается Angular?