2015-07-20 138 views
4

如何通过ajax从远程URL获取内容?jQuery ajax请求被阻止,因为跨源

jQuery的Ajax请求是块,因为跨来源

控制台登录

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.dailymotion.com/embed/video/x28j5hv . (Reason: CORS header 'Access-Control-Allow-Origin' missing).

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.dailymotion.com/embed/video/x28j5hv . (Reason: CORS request failed).

代码

$.ajax({ 
url: "http://www.dailymotion.com/embed/video/x28j5hv", 
type:'GET', 
contentType: "html", 
crossDomain:true, 
success: function(data){ 
    //$('#content').html($(data).html()); 
    var src = $(data).html(); 
    alert(src); 
    return false; 
} 
+0

@ D4V1D对不起,我忘了将它加入到我的问题。如何通过Ajax从远程URL获取内容? –

+1

设置'crossDomain:true'不会设置跨域请求。该网站必须启用CORS才能正常工作。 –

+0

@RoyiNamir你能解释一下吗?我是jquery的新手。 –

回答

8

尝试在您的Ajax调用中使用JSONP。它将绕过同源策略。

http://learn.jquery.com/ajax/working-with-jsonp/

尝试例如

$.ajax({ 
    url: "https://api.dailymotion.com/video/x28j5hv?fields=title", 

    dataType: "jsonp", 
    success: function(response) { 
     console.log(response); // server response 
    } 

}); 
+6

jsonp实际上工作,但响应数据显示我错误。 'SyntaxError:missing;之前的声明 \t {“result”:[{“id”:1,“cat_name”:“travel”,“imgpath”:“http:\/adas \/asd” “result”,这是什么意思? –

+0

这意味着它不能解析响应。当你使用jsonp时,响应应该是类似于CALLBACK({... JSON ...})。你可以定义CALLBACK指定“ jsonpCallback“放在你的ajax参数中,或者它将随机生成并作为名为”callback“的字段发送到请求中 – chrmcpn

2

没有什么,你可以在你做到底(客户端)。您无法自行启用跨域调用,源(dailymotion.com)需要启用COORS才能运行。

你真的可以做的唯一事情就是创建一个服务器端代理脚本,为你做到这一点。你在你的项目中使用任何服务器端脚本? PHP,Python,ASP.NET等?如果是这样,你可以创建一个服务器端的“代理”脚本,使HTTP调用dailymotion并返回响应。然后,从Javascript代码中调用该脚本,因为该服务器端脚本与脚本代码位于同一个域中,所以COORS不会成为问题。

相关问题