2011-09-23 5 views
1

oembed API (json)를 통해 vimeo 소스 코드를 가져 오려고합니다.Ajax 요청은 Safari에서 작동하지만 Firefox (Vimeo oembed)에서는 작동하지 않습니다.

사파리에서는 정상적으로 작동하지만 파이어 폭스에서는 반환 된 json이 올바르게 해석되지 않는 것 같습니다. 성공 메소드에서 javascript 객체 대신 null 값을 얻습니다.

<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.4.min.js'></script> 


    <script type='text/javascript'> 
    //<![CDATA[ 
    $(window).load(function(){ 
    $.ajax({ 
    url: "http://vimeo.com/api/oembed.json?&format=json&url=http%3A//vimeo.com/2197639", 
    dataType: "json", 
    success: function(data) { 
     $('#output').html(JSON.stringify(data)); 
    }, 
    error: function(errorSender, errorMsg) { 
     console.log(errorSender); 
     console.log(errorMsg); 
     $('#output').html(errorSender + ' ' + errorMsg); 
    } 
    }); 
    }); 
    //]]> 
    </script> 

모든 :

나는 jsfiddle 예에 대한 링크를 제공 싶지만, 샘플이 허용되지 않은 기원에 대해, 거기에 약간의 오류가 작동하지 않습니다 .. 그래서 여기

코드입니다 무엇이 잘못 될 수 있습니까? 그것은 json과 뭔가인가?

샘플 JSON은 다음과 같습니다

{"type":"video","version":"1.0","provider_name":"Vimeo","provider_url":"http:\/\/vimeo.com\/","title":"Early Morning Qena","author_name":"Oliver Wilkins","author_url":"http:\/\/vimeo.com\/offshoot","is_plus":"1","html":"<iframe src=\"http:\/\/player.vimeo.com\/video\/2197639\" width=\"1280\" height=\"720\" frameborder=\"0\" webkitAllowFullScreen allowFullScreen><\/iframe>","width":1280,"height":720,"duration":229,"description":"Early morning in Quft, near Qena. Shot with EX1 and Letus Extreme 35mm DOF adaptor.\n\nwww.offshoot.tv\n","thumbnail_url":"http:\/\/b.vimeocdn.com\/ts\/271\/854\/27185484_640.jpg","thumbnail_width":640,"thumbnail_height":360,"video_id":2197639} 

답변

3

당신은 당신이 도메인 간 AJAX 호출을 수행하려고하기 때문에 JSONP를 사용해야합니다. 그것은 vimeo가 지원하는 것 같습니다. 당신은 당신의 URL (내가 마지막에 추가 된 callback=? 매개 변수를 주목하고 format=jsonp)를 수정하여 콜백을 지정해야합니다 : 여기

$.ajax({ 
    url: "http://vimeo.com/api/oembed.json?format=jsonp&url=http%3A%2F%2Fvimeo.com%2F2197639&callback=?", 
    dataType: "jsonp", 
    success: function(data) { 
     $('#output').text(JSON.stringify(data)); 
    }, 
    error: function(errorSender, errorMsg) { 
     $('#output').text(errorSender + ' ' + errorMsg); 
    } 
}); 

와는 live demo입니다.

+0

감사합니다.하지만 사파리에서 작동하는 이유를 말씀해 주시겠습니까? 사파리에도 똑같은 안전 문제가 적용된다고 생각합니까? – Wesley

+0

@ 웨슬리, 네, 정상적으로 적용해야합니다. 어떤 설정을 수정했을 수도 있습니다. 나는 모른다. 이 방법이 모든 브라우저에서 작동한다는 것에 의존 할 수는 없습니다. JSONP를 사용하여 모든 브라우저에서 코드가 작동하는지 확인하십시오. –

+0

실제로 vimeo의 문서를 보면 http://vimeo.com/api/docs/oembed - JSONP에 대한 언급조차하지 못합니까? – Wesley

관련 문제