example api vine javascript

442
24 декабря 2016, 18:16

Я тут сутки не спал, поэтому помогите мне подумать.

Есть плеер Vine. У него есть апи https://dev.twitter.com/web/vine/oembed . Можете сразу посмотреть все заголовки ответа тут https://vine.co/oembed.json?id=5xJVBXAunrD

Мне нужно с клиента получить данные отправляю запрос

$.ajax({ 
  url: 'https://vine.co/oembed.json?id=5xJVBXAunrD', 
  dataType: "jsonp", 
  contentType: "application/json", 
  success: () => { 
    console.log(arguments) 
  }, 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Получаю по лицу:

Refused to execute script from 'https://vine.co/oembed.json?id=5xJVBXAunrD&callback=jQuery211011806981946079831_1482419611704&_=1482419611705' because its MIME type ('application/json') is not executable, and strict MIME type checking is enabled.

В общем, как я понял, из-за того самого строго соответствия мне нужно все это "Добро" проксировать?

Answer 1

Ошибка происходит из-за того, что сервис отдает json, а dataType = jsonp.

Если бы сервис разрешал обращаться к себе с различных сайтов достаточно было бы просто заменить dataType на json. Но в данном случае сервис не разрешает и браузер выдаст ошибку

No 'Access-Control-Allow-Origin' header is present on the requested resource.

В качестве решение можно либо делать запрос к своему серверу, и уже с него делать серверными средствами запрос, либо воспользоваться одним из сервисов, например: https://cors-anywhere.herokuapp.com/

Пример:

$.ajax({ 
  url: 'https://cors-anywhere.herokuapp.com/https://vine.co/oembed.json?id=5xJVBXAunrD', 
  dataType: "json", 
  contentType: "application/json", 
  success: data => { 
    console.log(data) 
  }, 
});
.as-console-wrapper { 
  top: 0; 
  max-height: 100% !important; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Answer 2

Попробуйте заменить контент тайп на Content-Type: application/javascript

READ ALSO
Отправка массива посредством AJAX запроса

Отправка массива посредством AJAX запроса

Отправляю запрос на сервер следующим образом

401
Как сделать такой код через if? [требует правки]

Как сделать такой код через if? [требует правки]

Есть код, который выполняется если значение совпадает с чем-то

382