没有CORS或JSONP的跨域请求

时间:2014-11-26 01:16:34

标签: javascript jquery ajax xmlhttprequest cross-domain

我知道之前已经问过这个问题,但没有一个答案对我有用!我正在做一个学校项目,我想获得学校服务器上动态日程表文件返回的HTML(解析我的项目)。

我想要HTML的页面是:https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched

我认为没有为学校服务器文件启用CORS,我不知道它是否支持JSONP ......

如何设置跨域请求以从此页面获取HTML?

我试过了:

$.ajax({
    type:'POST',
    url: 'https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched',
    headers: {
      'Access-Control-Allow-Origin': '*'
   },
   contentType: 'text/html',
   crossDomain:true
}).done(function( data ) {

});

我收到错误:

  

XMLHttpRequest无法加载   https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许原点'null'访问。响应   有HTTP状态码501。

当我添加:

dataType:'jsonp'

我收到错误:

  

GET   https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched?callback=jQuery21108736664191819727_1416964243449&_=1416964243450   400(错误请求)jquery.min.js:4send jquery.min.js:4n.extend.ajax   jquery.min.js:4(匿名函数)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:11)

浏览器强制执行"same-origin"访问控制,除非站点明确允许跨源请求(通过CORS或JSONP)。因此,如果您尝试访问的站点不允许跨源请求,则无法使用浏览器直接从站点获取数据。它只是不允许它(出于合法的安全原因)。

这意味着您需要使用某种可以为您获取数据的第三方代理。最常见的两种方法是:

  1. 您自己的服务器。您向自己的服务器发出请求以从其他服务器获取某些内容。然后,您的服务器从其他服务器获取数据并在浏览器中将其返回给您。

  2. 代理服务器。有一些预先配置的代理服务器只是为了执行选项#1中描述的内容而构建的。您可以使用代理服务或安装自己的代理服务器为您执行此操作,也可以配置您自己的Web服务器以具备此功能。

答案 1 :(得分:1)

我知道当技术限制使生活更加艰难时会有多么令人沮丧。

对于这种情况,您可以尝试使用Javascript库:Xdomain
您可以在此处查看参考文章:http://hayageek.com/cross-domain-ajax-jquery-without-cors/
如果您遇到问题,YCombinator讨论可能会有所帮助:https://news.ycombinator.com/item?id=8023844

其他方法是,使用您的服务器获取HTML页面,并在需要时推送到您的应用程序。像这样的东西。假设您已将一个iframe添加为'my_external_content.php'。代码应该是

    <?php

        $externalURL = "http://otherdomain.com";

        $externalData = file_get_contents($externalURL);

        echo externalData;
    ?>

请参阅SO上的其他问题以供参考:Ways to Circumvent Same Origin Policy

希望这有助于您或其他处境相同的人。