我无法使用他们的api通过jquery
登录mediawiki我使用以下代码登录mediawiki api
与http://www.mediawiki.org/wiki/Example_login_code_in_JS_(using_JQuery)
相同<!DOCTYPE html>
<html lang="en">
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function wiki_auth(login, pass, ref){
$.post('http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=' + login +
'&lgpassword=' + pass + '&format=json',
function(data) {
if(data.login.result == 'NeedToken') {
$.post('http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=' + login +
'&lgpassword=' + pass + '&lgtoken='+ data.login.token +'&format=json',
function(data) {
if(!data.error){
if (data.login.result == "Success") {
document.location.href=ref;
} else {
console.log('Result is: '+ data.login.result);
}
} else {
console.log('Error: ' + data.error);
}
});
} else {
console.log('Result is not: ' + data.login.result);
}
if(data.error) {
console.log('Error: ' + data.error);
}
var myresult = data.login.result;
});
}
</script>
<script>
$(document).ready(function(){
wiki_auth('Test', 'test123', '/w.1.22/');
});
</script>
</head>
<body>
</body>
</html>
因此,当我调试时,我可以看到第一个post请求返回令牌和'NeedToken'结果。
在我向其提供令牌ID后的第二个帖子请求之后,它再次返回相同的结果NeedToken而不是成功消息
这是我在chrome调试器控制台中可以看到的
XHR finished loading: POST "http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=Test&lgpassword=test123&format=json".
XHR finished loading: POST "http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=Test&lgpassword=test123&lgtoken=a037a59d881bbc48ce54951d009284ce&format=json".
Result is: NeedToken
如何解决这个问题?
答案 0 :(得分:0)
有一些问题需要解决:
首先,您正在尝试进行跨站点脚本编写。如果允许这样做,那将是一个巨大的安全漏洞。因此,网络浏览器不会让你这样做。也就是说,如果要将此脚本托管在&#34; upgrade.vaniquotes.org&#34;上,您将希望使用API的相对路径,而不是绝对路径。
其次,
lgname,lgpassword和lgtoken是POST参数。您正在使用post方法,但未发布任何参数。只有动作和格式是GET参数。为此,您的代码需要采用
格式$.post('/api.php?action=login&format=json', {lgname: login, lgpassword: password}, ...