我四处寻找,似乎无法找到我正在寻找的东西。
如何在javascript中使用api.php?action=query&list=allusers&augroup=sysop&aulimit=max&format=json
的结果?
我要做的是创建一个脚本来简单地改变维基上用户名的颜色,如果它们在某些组中,如sysop,官僚等等。
虽然我通常很擅长弄清楚这些事情,但我整天都在努力工作,而我却无处可去。任何人都可以帮我解决一些例子或事情吗?如果可以使用大多数jQuery来完成它。
提前致谢。
编辑:(回应ahren的评论):
我开始尝试清理并修改其他人编写的脚本以添加更多功能/使其按预期工作,但我无法理解它:
/* HighlightUsers by Bobogoobo
* Changes color of links to specified groups and users
* TODO: redo but much better (recursive would be easier - I've learned a lot since I wrote this thing)
*/
function highlightUsers () {
"use strict";
var highlight = window.highlight || {}, selector = '', that, userstr,
indices = [],
i = 0,
user,
ns,
x,
y;
for (ns in mw.config.get('wgNamespaceIds')) {
if (i === 4) {
userstr = ns;
}
i++;
}
userstr = userstr.charAt(0).toUpperCase() + userstr.substring(1);
if (highlight['selectAll']) {
selector = 'a[href$=":';
} else {
selector = 'a[href="/wiki/' + userstr + ':';
}
for (y in highlight) {
indices.push(y);
}
for (x in highlight) {
that = highlight[x];
if (x === 'selectAll') {
continue;
} else if (x === 'users') {
for (user in that) {
$(selector + user.replace(/ /g, '_') + '"]').css({
'color': that[user],
'font-weight': 'bold'
}).attr('data-highlight-index',
$.inArray('users', indices));
}
} else {
(function (userColor, userGroup) { //JavaScript doesn't like to cooperate with me
$.getJSON('/api.php?action=query&list=allusers&augroup=' + userGroup +
'&aulimit=max&format=json', function (data) {
var stuff = data.query.allusers, //, select = '';
user;
for (user in stuff) {
//select += selector + stuff[user].name.replace(/ /g, '_') + '"], ';
$(selector + stuff[user].name.replace(/ /g, '_') + '"]').each(function () {
if (($(this).attr('data-highlight-index') || -1) < $.inArray(userGroup, indices)) {
$(this).attr('data-highlight-index', $.inArray(userGroup, indices));
$(this).css({
'color': userColor,
'font-weight': 'bold'
});
}
});
}
//select = select.substring(0, select.length - 2);
//$(select).css('color', userColor);
});
}(that, x));
}
}
}
这是我最新的草稿,我设法完成了一些事情,比如使名称变粗,并纠正语法错误,但我已经决定从头开始而不是试图理解其他人的代码可能会更好
答案 0 :(得分:0)
我更喜欢使用jQuery AJAX功能。
用法很简单:
$.ajax({
url : 'api.php',
type : 'post',
datatype : 'json',
data : {
'list' : allusers,
'augroup' : 'sysop'
},
success : function(success_record) {
//here you can do Js dom related modifications like changing color etc.
// after php(server side) completes
}
});
答案 1 :(得分:0)
我尝试了Markrand描述的AJAX解决方案,但不幸的是我无法让它工作。首先我得到“allusers未定义”,所以我将它包装在引号中以便它不被视为var,然后我不得不将'api.php'更改为'/api.php',因为它是成为'/wiki/api.php',它不存在,并添加斜杠使它使用基本URL。然后它会执行并返回一个对象,但是在我可以使用的对象中没有任何用处(例如用户名数组),它给我的只是API文档...所以我最终做了这样的事情:< / p>
function highlightAdmins() {
$.getJSON('/api.php?action=query&list=allusers&augroup=sysop&aulimit=max&format=json',
function(data) {
for (var i = 0; i < data.query.allusers.length; i++) {
$('a[href$="User:' + data.query.allusers[i].name + '"]').css('color', '#FF6347');
}
});
}
这给了我一个包含查询结果的对象,在本例中是一个sysop用户名(data.query.allusers[i].name
)数组,我可以迭代它并执行操作。