jQuery.getJSON вызывает «Uncaught SyntaxError: Неожиданный токен:» для youtube oembed - PullRequest
1 голос
/ 03 июля 2011

Вот что я пытаюсь сделать:

$.getJSON('http://www.youtube.com/oembed?url=http://www.youtube.com/watch%3Fv%3DB-m6JDYRFvk&callback=?', 
           function(data) { console.log(data) });

При свертывании этого URL я получаю следующий ответ:

{
    "provider_url": "http:\/\/www.youtube.com\/",
    "title": "Coder Girl",
    "html": "\u003cobject width=\"425\" height=\"344\"\u003e\u003cparam name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\"\u003e\u003c\/param\u003e\u003cparam name=\"allowFullScreen\" value=\"true\"\u003e\u003c\/param\u003e\u003cparam name=\"allowscriptaccess\" value=\"always\"\u003e\u003c\/param\u003e\u003cembed src=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"\u003e\u003c\/embed\u003e\u003c\/object\u003e",
    "author_name": "dalechase",
    "height": 344,
    "thumbnail_width": 480,
    "width": 425,
    "version": "1.0",
    "author_url": "http:\/\/www.youtube.com\/user\/dalechase",
    "provider_name": "YouTube",
    "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/B-m6JDYRFvk\/hqdefault.jpg",
    "type": "video",
    "thumbnail_height": 360
}

Но когда я пытаюсь выполнить приведенный выше код,Я получаю Uncaught SyntaxError: Unexpected token : (Chrome).Похоже, что проблема может быть связана с экранированием прямой косой черты, или, возможно, jQuery отправляет запрос JSONP, но ответ чистый JSON.

Кто-нибудь еще сталкивалсяэто проблема?

Ответы [ 4 ]

3 голосов
/ 03 июля 2011

Youtube (на момент написания этого ответа) oembed не поддерживает JSONP с их запросами, поэтому то, что вы получаете, является правильным ... но это не то, что вам нужно .То, что вам нужно для вызовов JSONP, будет выглядеть следующим образом:

functionName({
    "provider_url": "http:\/\/www.youtube.com\/",
    "title": "Coder Girl",
    "html": "\u003cobject width=\"425\" height=\"344\"\u003e\u003cparam name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\"\u003e\u003c\/param\u003e\u003cparam name=\"allowFullScreen\" value=\"true\"\u003e\u003c\/param\u003e\u003cparam name=\"allowscriptaccess\" value=\"always\"\u003e\u003c\/param\u003e\u003cembed src=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"\u003e\u003c\/embed\u003e\u003c\/object\u003e",
    "author_name": "dalechase",
    "height": 344,
    "thumbnail_width": 480,
    "width": 425,
    "version": "1.0",
    "author_url": "http:\/\/www.youtube.com\/user\/dalechase",
    "provider_name": "YouTube",
    "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/B-m6JDYRFvk\/hqdefault.jpg",
    "type": "video",
    "thumbnail_height": 360
});

... поскольку в настоящее время возвращается недопустимый JavaScript (сам по себе, и эточто это такое), и вот как работает JSONP, ответ на самом деле должен быть исполняемым JavaScript.

Вы можете получить ту же ошибку, просто поместив этот код прямо на вашей странице в блоке <script> ( см. демо здесь ).


Я не уверен точно что вы пытаетесь сделать, но если вы только после части для встраивания,Я рекомендую такой плагин, как jQuery-oembed .Если вам нужны данные ... вам нужно что-то на вашем сервере для обработки JSON, а затем получить данные с вашего сервера.

1 голос
/ 03 июля 2011

Вам больше не нужно использовать JSONP с jQuery начиная с версии 1.5.Попробуйте $ .ajax () и установите crossDomain: true и удалите все ваши обертки? Callback и посмотрите, работает ли он.Это гораздо более надежный метод, а синтаксис намного чище.

0 голосов
/ 26 декабря 2013

Stringify результат работает для меня.

$.getJSON('your_url_here', function(data) {
    console.log(data);  //"Object { Json content }"
    var jsonString = JSON.stringify(data);  //"{ Json content }", the "Object" literal is removed.
    var parsed = JSON.parse(jsonString); //Parse should work now.
});
0 голосов
/ 03 июля 2011

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

...