从Github加载readme文件?

4

我有以下代码:

xmlhttp.open("GET", "https://raw.githubusercontent.com/Lemony-Andrew/SFML-Game-Engine/master/README",true);
xmlhttp.send();

它只是从GitHub检索一个自述页面,但被拒绝访问。如何“合并”或加载来自GitHub的基本readme(或描述)?就像在Careers 2.0中看到的那样,它显示了项目创建的日期和描述的片段。
这是可能的吗?
如果您想看到它,错误信息:
XMLHttpRequest无法加载https://raw.githubusercontent.com/Lemony-Andrew/SFML-Game-Engine/master/README。'Access-Control-Allow-Origin'标头的值为'https://render.githubusercontent.com',与提供的来源不相等。因此,源'https://c9.io'被禁止访问。

你不能发起跨域 AJAX 请求,除非目标服务器允许。请向你的服务器发起请求,由服务器获取 README 并将其返回给你的 JS。 - Ian
我对这一切都有点陌生,或者说是重新学习。那么你的意思是什么?我发送一个ajax调用到我的服务器上的一个php页面,试图获取github上的页面? - Andrew
这正是我想说的!由于您没有拥有 github.com 并且不是在该域内发出请求,因此浏览器不会允许您这样做。服务器可以“允许”这种跨域通信,但 Github 没有这样做。因此,您需要让您的服务器(PHP)发出请求并为您返回结果。 - Ian
谢谢!这似乎是一个非常合适的方法,但您是否考虑过马丁的答案? - Andrew
2
Martin的回答基本上是一样的,只不过请求发送到了另一个服务器(而不是你的PHP服务器),并且可以有效地完成相同的事情。虽然它需要支持CORS(他包括浏览器支持统计数据),但他的第二段建议创建自己的代理(就像我说的)是更好的解决方案! - Ian
1个回答

5

您无法进行跨域请求。但是,现代浏览器支持CORS,并且一些好心人已经设置了一个Heroku代理来访问GitHub内容... 因此,在现代浏览器中,以下内容将会起作用:

var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "http://github-raw-cors-proxy.herokuapp.com/Lemony-Andrew/SFML-Game-Engine/master/README",true);
xmlhttp.send();

更好的解决方案是在同一域内编写一个代理,然后调用GitHub。这将适用于旧版浏览器,并且您不需要依赖他人的服务。
以下是CORS的当前浏览器支持矩阵: http://caniuse.com/#search=cors

谢谢你提供的解决方案!还有一个问题是:你是从哪里得到那个地址的?当然是为了以后参考。 - Andrew
这是一个在 GitHub 上的 Node.js 项目:https://github.com/zeke/github-raw-cors-proxy - Martin Beeby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接