设置正确的Accept HTTP头以从GitHub repo获取解析后的html内容



如何设置正确的Accept HTTP头,以便使用GitHub的API请求另一种媒体类型(在本例中为Html)?当前的content object总是编码为base64,但我需要它作为渲染的html:application/vnd.github.VERSION.html+json

$.ajax({
    url: "https://api.github.com/repos/jquery-boilerplate/patterns/readme",
    headers: { 
        Accept: "application/vnd.github.v3.html+json"
    },
    dataType: 'jsonp',
    success: function (data) {
        console.log(data.data.content); // "IyNSZWN..."
    },
    error: function (error) {
        console.log(error);
    }
});

我也尝试过使用jQuerys beforeSend,但没有成功:

beforeSend: function(jqXHR){
    jqXHR.setRequestHeader("Accept", "application/vnd.github.v3.html+json");
}

所以问题是:

是否可以在不解码内容的情况下获得渲染的html:

decodeURIComponent(
    window.escape(
        window.atob(
            data.data.content.replace(/[^A-Za-z0-9+/=]/g, "")
        )
    )
)

然后在markdown解析器中对其进行解析?

您正在使用dataType: "jsonp"。JSONP的工作原理是将<script>标记插入到文档中,以便从另一个域加载数据。由于<script>标记只需向URL发送GET请求即可工作,而无需设置标头,因此Accept标头将被忽略(您可以在使用的浏览器的开发工具中验证这一点)。由于您的标头被忽略,因此它被赋予默认值Accept: */*,用于加载编码数据。

解决方案不是使用JSONP(dataType: "jsonp"),而是只使用JSON(dataType: "json")。这将强制jQuery不使用<script>标记,而是使用XHR。但是,使用XHR将引发错误,因为数据在另一个域上,并且您将违反同源策略。为了解决这个问题,请使用GitHub为您提出请求的域(您的网站)设置一个OAuth应用程序,这将使您能够使用JSON数据类型(通过传递CORS头来实现)提出跨源请求。点击此处阅读更多信息:

http://developer.github.com/v3/#cross-原始资源共享

最新更新