注意:我没有足够的声望发布所有链接,因此我只删除了第一个字母,以便文本编辑器不会将其作为链接阅读。要去他们,请将其粘贴到您的地址栏,并在前面添加h。如何使用JavaScript与OAuth访问可汗学院API?
我想从可汗学院使用他们的API访问用户数据,但是,这是我第一次使用他们的API或AJAX。到目前为止,我已经设法检索视频或练习的数据,但我在使用OAuth检索用户数据时遇到了问题。这里是info on Khan Academy authorization。他们使用OAuth 1.0。这里是the OAuth library I am using。下面是KA API文档:http://api-explorer.khanacademy.org/我曾尝试:
var oauth = OAuth({
consumer: {
public: '****************',
secret: '****************'
},
signature_method: 'HMAC-SHA1'
});
var request_data = {
url: 'http://www.khanacademy.org/api/v1/exercises/logarithms_1',
method: 'GET'
};
$.ajax({
url: request_data.url,
type: request_data.method,
headers: oauth.toHeader(oauth.authorize(request_data))
}).done(function(data) {
alert("done");
});
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
\t "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>KA API Test</title>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.23.1" />
<!-- sha1 -->
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js"></script>
<!-- sha256 -->
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
<script src="oauth-1.0a.js"></script>
<script src="jquery-1.12.0.min.js"></script>
</head>
<body>
</body>
</html>
我自己也尝试此Javascript使用相同的HTML:
var oauth = OAuth({
consumer: {
public: 'qdMdMjjJQKrwJw2S',
secret: '7XeknfpVBzx8fGMK'
},
signature_method: 'HMAC-SHA1'
});
var request_data = {
url: 'http://www.khanacademy.org/api/v1/exercises/logarithms_1',
method: 'GET'
};
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.khanacademy.org/api/v1/exercises/logarithms_1", true);
xhr.setRequestHeader("Authorization", oauth.toHeader(oauth.authorize(request_data)));
xhr.send();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
for (var key in response) {
console.log(key + ":" + response[key]);
}
alert(response.translated_description_html);
}
}
在控制台中都出现此错误:“XMLHttpRequest无法加载http://www.khanacademy.org/api/v1/exercises/logarithms_1。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。 “http://localhost”因此不允许访问。“
注意:XMLHttpRequest正常工作并返回我想要的内容,然后添加xhr.setRequestHeader("Authorization", "OAuth " + oauth.toHeader(oauth.authorize(request_data)));
。但是,这只是一个不需要授权的测试链接,我会更改它后来,
PS我想解决这个错误,但我也只需要正确使用OAuth,我想是因为我没有使用OAuth之前有错误,他们是相关的。
并允许每一个地方,你可以使用: '访问控制允许来源:*' 作为通配符项 –
您可以了解从以下网址更多: https://developer.mozilla.org/en -US/docs/Web/HTTP/Access_control_CORS –
因此,如果问题是Khan Academy不允许跨源请求,那么为什么程序在添加身份验证之前工作?这个问题必须与我使用的方式或可汗学院设置OAuth(最有可能是前者)的方式相同。 –