Ответ на запрос JSONp на вызов youtube oembed с ошибкой недопустимой метки

Я делаю вызов JSONp на YouTube, используя oembed, и в ответ firebug выдает ошибку «недопустимая метка».

Вот мой код

site = "www.youtube.com";
url = "http://www.youtube.com/watch?v=slORb622ZI8";

$.getJSON("http://"+site+"/oembed?callback=?",{"format":"json","url":url},function(data){
    alert("hello:\n"+data);
    alert(data.provider_url);
});

Кто-нибудь сталкивался с подобной проблемой с запросами oembed jsonp?


person Dhwanit    schedule 23.08.2010    source источник
comment
URL-адрес youtube.com/ не возвращает JSON с отступами, он просто возвращает JSON. Вы уверены, что API oEmbed поддерживает JSONP?   -  person Andy E    schedule 24.08.2010
comment
Я считаю, что проблема в том, что youtube.com/oembed?.... возвращает только json и не включает ту часть, где функция должна вызываться при возврате jsonp. Есть ли решение, в котором ответ обрабатывается как текст, а не json? Если я использую dataType в jquery.ajax() как xml или текст, запрос завершается ошибкой, поскольку запрос ajax не может быть отправлен во внешний домен.   -  person Dhwanit    schedule 24.08.2010


Ответы (2)


Проблема

API YouTube не поддерживает JSONP — см.:

Решение

Нет необходимости в прокси-сервере на стороне сервера и ключах API.

Вместо:

var url = "http://www.youtube.com/watch?v=slORb622ZI8";

$.getJSON("http://www.youtube.com/oembed?callback=?",
    {"format": "json", "url": url}, function (data) {
    alert("hello:\n"+data);
    alert(data.provider_url);
});

Попробуйте это с помощью службы Noembed:

var url = "http://www.youtube.com/watch?v=slORb622ZI8";

$.getJSON("https://noembed.com/embed?callback=?",
    {"format": "json", "url": url}, function (data) {
    alert("hello:\n" + data);
    alert(data.provider_url);
});

В качестве бонуса это также будет работать со ссылками Vimeo, если вы измените url на:

var url = "https://vimeo.com/45196609";

и многие другие поддерживаемые сайты.

Демо

См. DEMO на JS Fiddle.

Смотрите также

См. также эти вопросы:

person rsp    schedule 24.08.2015

Oembed API Youtube в настоящее время не оборачивает ответ JSON в обратный вызов. JSONP просто не поддерживается банкоматом, и похоже, что это не изменится в ближайшее время: https://groups.google.com/forum/?fromgroups=#!topic/youtube-api-gdata/5KuXxlLK07g

Вот запрос на соответствующий запрос функции: https://code.google.com/p/gdata-issues/issues/detail?id=4329

Самым простым решением было бы реализовать небольшой прокси-сервер на стороне сервера для выполнения запросов от имени клиента.

person polarblau    schedule 16.04.2013